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