⚠️

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

2022/01/01に公開

はじめに

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

https://docs.microsoft.com/ja-jp/archive/blogs/sharepoint_support/tips-for-csom-on-powershell?WT.mc_id=M365-MVP-5002941

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

脚注
  1. Assembly.LoadWithPartialName は obsolete なので使うなって話なのですが。 ↩︎

Discussion