SharePoint Online Management Shell がインストールする CSOM がいけてない
はじめに
発端は Japan SharePoint Support Team Blog の記事です。
SharePoint Online Management Shell をインストールすることで、CSOM のモジュールもインストールされます。
はい、確かに SharePoint Online Management Shell をインストールすると、CSOM が使えるようになります。ただし、SharePoint Online Management Shell が入れる CSOM はかなりイケてないので、個人的にはまったところを含めて紹介したいと思います。なお、以下はすべて 2018/03/29 時点の情報であり、今後変更される可能性があります。
問題点
モジュールが不完全
SharePoint Online Management Shell に含まれる CSOM の dll は以下の通りです。
Microsoft.Online.SharePoint.Client.Tenant.dll
Microsoft.SharePoint.Client.dll
Microsoft.SharePoint.Client.Runtime.dll
一方、CSOM の NuGet パッケージ (Microsoft.SharePointOnline.CSOM
の .NET 4.5 版) に含まれる dll は以下の通りです。
Microsoft.Office.Client.Policy.dll
Microsoft.Office.Client.TranslationServices.dll
Microsoft.Office.SharePoint.Tools.dll
Microsoft.Online.SharePoint.Client.Tenant.dll
Microsoft.ProjectServer.Client.dll
Microsoft.SharePoint.Client.dll
Microsoft.SharePoint.Client.DocumentManagement.dll
Microsoft.SharePoint.Client.Publishing.dll
Microsoft.SharePoint.Client.Runtime.dll
Microsoft.SharePoint.Client.Runtime.Windows.dll
Microsoft.SharePoint.Client.Search.Applications.dll
Microsoft.SharePoint.Client.Search.dll
Microsoft.SharePoint.Client.Taxonomy.dll
Microsoft.SharePoint.Client.UserProfiles.dll
Microsoft.SharePoint.Client.WorkflowServices.dll
明らかに足りない。確かに Microsoft.SharePoint.Client.dll
と Microsoft.SharePoint.Client.Runtime.dll
がコア機能をすべて持っているので、だいたいのことは事足りてしまうのですが、検索やソーシャル、管理されたメタデータといった機能が入っていないので、突然困ることになります。
謎のバージョンを GAC に突っ込む
SharePoint Online Management Shell の CSOM のアセンブリ バージョンは 16.0.7414.1200
です。そして、NuGet の CSOM のバージョンは 16.1.7414.1200
です。これだけならまだ困らないのですが、SharePoint Online Management Shell はなんと 16.0.7414.1200
の dll を GAC に入れてしまいます。そうすると、NuGet の CSOM でしか存在しない dll を読み込んだときに、アセンブリ バージョンの不整合が起こり、予期しないエラーが発生します。具体的には Assembly.LoadWithPartialName で dll
を読み込んだときなどに発生します。[1]
前掲の記事でも以下のコメントがあるのは、こういう状況が発生することを認識しているためと思われます。
なお、SharePoint Online Management Shell と SharePoint Online Client Components SDK などを同時にインストールした場合エラーが発生する可能性があるため、いずれかのみのインストールとしてください。
ともあれ、不完全に GAC に突っ込む動作はかなりいけてないので、何らかの改善を望みたいところです。せめてアセンブリ バージョンを合わせてほしいです。
-
Assembly.LoadWithPartialName
は obsolete なので使うなって話なのですが。 ↩︎
Discussion