この記事はVisual Studioを立ち上げてプロジェクトを開くとき、毎回 "ConnectedServicesPackageが正しくロードされませんでした" というエラーが発生する人のための備忘録である。
私の環境ではAzureクラウドサービス(.ccproj)の含むソリューションで発生した。他のプロジェクトの種類については検証しなかったため詳細な再現条件は特定していない。
背景
Visual Studio 2015のUpdate 1とAzure SDK 2.8.2.1、ならびにASP.NET Web Toolsのセットアップを済ませた後、上記の警告が出るようになった。まとめて導入したため元凶の特定には至っていない。
この症状は発生頻度があまり高くないのか、日本語の質問サイトでもstackoverflowに投稿された"完全にアンインストールしてディレクトリを削除してから入れ直せ"という回答が引用されているような状態である。
言うまでもなくVisual Studioは巨大、かつ多数の拡張機能やSDKと連動するソフトウェアであり、"ゼロからインストールをやり直せば幸せになれるかも"などという回答は事実上の初心者煽りである。本当に他の手段がない時を除けばインストーラーの修復コマンドで対処すべきだ。
手順
1. IDEの起動ログ(VS2015なら 自分のユーザーディレクトリの AppData/Roaming/VisualStudio/14.0/ActivityLog.xml にある)を読んで、拡張パッケージのDLLの読み込みに失敗していないかどうか確認する。ConnectedServicesPackageで検索して少し読み進めるとロードに失敗したDLLのフルパスが確認できるはずである。見当たらなかったらこのTipsでは対処できない可能性がある。
2. 次いで問題のDLLが存在するはずのフォルダに移動する。これはVS2015ならProgram Files(x86)の中の Microsoft Visual Studio 14.0/Common7/IDE/Extensionsの下にある大量のフォルダの一つである。それを開いたとき君は知るだろう。なぜかDLLファイルだけが消滅していること、そのせいで普通の修復インストールではこの不具合が復元されないことを。
フォルダ自体が存在しない場合、君はそのまま次の手順に行っても良いし、別の症状だと見切りをつけて他のTipsを検索しても良い。
3. いま開いているフォルダを削除する。消すのが怖ければ切り取ってデスクトップなどに移動させても良い。リネームで済ませた場合にどうなるかは検証していないが、後述する理由から恐らく修復に失敗するのではないかと思われる。
4. Visual Studioのインストーラーを起動し、修復を実行する。完了するとC++の再頒布可能パッケージのバージョンが衝突しているという警告が出る場合があるが、これは今回の問題とは関係しない。
5. 修復が完了したらもう一度プロジェクトを開き、再現しなくなったことを確認する。
備考
最初はこの問題を引き起こしている"Microsoft 接続済みサービス"パッケージを拡張機能の管理画面から再セットアップできるかと考えていたが、このパッケージの拡張機能インストーラーはオンラインで発見することができなかった。
一連の処理を済ませた後、Visual Studioの拡張機能のディレクトリを見ると、削除したフォルダと同じ名前のフォルダは存在しなかった。このフォルダ名は何らかのハッシュ値であると思われるが、パッケージのユニークIDに対して単一の名前が生成されているわけではないらしい。結果として修復結果の確認のためにタイムスタンプの新しいフォルダを片っ端から検索することを強いられた。