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 のライブラリは以下の通りです。
Microsoft.Online.SharePoint.Client.Tenant.dll
Microsoft.SharePoint.Client.dll
Microsoft.SharePoint.Client.Runtime.dll
一方、CSOM の NuGet パッケージ (Microsoft.SharePointOnline.CSOM
の .NET 4.5 版) に含まれるライブラリは以下の通りです。
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
に集約されています。そのため一般的な操作であればこの 2 つのライブラリで事足ります。ただ、検索やソーシャル、管理されたメタデータといった機能が入っていないので、突然困ることになります。
謎のバージョンを 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