からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

SharePoint Online Management Shell がインストールする CSOM がいけてない

発端は Japan SharePoint Support Team Blog の記事です。

blogs.technet.microsoft.com

SharePoint Online Management Shell をインストールすることで、CSOM のモジュールもインストールされます。

はい、確かに SharePoint Online Management Shell をインストールすると、CSOM が使えるようになります。ただし、SharePoint Online Management Shell が入れる CSOM はかなりイケてないので、個人的にはまったところを含めて紹介したいと思います。なお、以下はすべて 2018/03/29 時点の情報であり、今後変更される可能性があります。

(2019/03/01 追記)
PowerShell Gallery から入手できるようになりました。

blog.karamem0.jp

モジュールが不完全

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 に突っ込む動作はかなりいけてないので、何らかの改善を望みたいところです。せめてアセンブリ バージョンを合わせてほしいです。

*1:Assembly.LoadWithPartialName は obsolete なので使うなって話なのですが。