少し前に、Visual Studio 2015で正常に機能するカスタムTFSチェックインポリシーを開発しました。ここで、Visual Studio 2017をインストールし、以前のVS2015で行ったのと同じ方法でチェックインポリシーアセンブリを登録したいと思いました。しかし、これは機能しません。 カスタムチェックインポリシーアセンブリをVS2017に登録するにはどうすればよいですか?
VS2015の場合、次のレジストリキーがありました。
_[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\TeamFoundation\SourceControl\Checkin Policies]
"MyCheckInPolicy"="C:\\Program Files\\My\\MyCheckInPolicy.dll"
_
そして
_[HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0_Config\TeamFoundation\SourceControl\Checkin Policies]
"MyCheckInPolicy"="C:\\Program Files\\My\\MyCheckInPolicy.dll"
_
それに応じて、VS2017用にこれらのキーを追加しました(_15.0
_):
_[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\15.0\TeamFoundation\SourceControl\Checkin Policies]
"MyCheckInPolicy"="C:\\Program Files\\My\\MyCheckInPolicy.dll"
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\15.0_Config\TeamFoundation\SourceControl\Checkin Policies]
"MyCheckInPolicy"="C:\\Program Files\\My\\MyCheckInPolicy.dll"
_
しかし残念ながら、これは機能しません。
MyCheckInPolicy
表示されません1mycheckinpolicy
)が「登録されていません」というエラーメッセージが表示されます。もちろん、レジストリの変更後にIDEを再起動しましたが、 再起動 でも私のマシンは役に立ちませんでした。
情報 これまでに見つけたらしいチェックインポリシーは拡張機能(vsix)の一部である必要があることを示唆していますが、これは信じたくありません。
この問題は、アセンブリがIDEにロードされたときに解決できないいくつかの参照に起因していると思います。
MyCheckInPolicy
プロジェクトは、VS2015フォルダーC:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer
から_Microsoft.TeamFoundation.VersionControl.Client.dll
_ v14.0を参照します。
VS2017フォルダーからそれぞれのdllを参照しようとしましたが、アセンブリがboth IDEで機能しません。
また、代わりにNugetパッケージ "Microsoft.TeamFoundation.VersionControl.All" v12.0.30723.2を使用して、すべてのファイルを出力ディレクトリ(パッケージのすべてのアセンブリが含まれているようです)からレジストリキーに記載されている場所に展開しました。 。これは同じ結果でした。ポリシーはVS2015にもVS2017にもロードできません。
TFS 12.0.30723.0を使用しています。
1それで、VS2017はアセンブリをロードしようとさえせず、レジストリキーを気にしないようですか?
Visual Studio 2017には、拡張性に対する 重大な変更 があります。レジストリ構成の多くは「プライベート」レジストリに移動されました。
レジストリへの影響を減らすために、Visual StudioはRegLoadAppKey関数を使用して、レジストリキーを%VsAppDataFolder%\ privateregistry.binの下のプライベートバイナリファイルに格納するようになりました。非常に少数のVisualStudio固有のキーのみがシステムレジストリに残ります。 ( リンク )
レジストリキーをvsixの.pkgdefファイルの一部として定義することにより、インストール時にVS 2017は、以前のバージョンのVSの場合のように、実際のレジストリではなく、プライベートレジストリにキーを書き込みます(私は推測します)。これにより、ポリシーを選択できるようになります。
したがって、VS2017でポリシーを機能させるために実行した手順は次のとおりです。
.pkgdef
ファイルを次のようにVSIXプロジェクトに追加します(これはレジストリキーエントリです)。
[$RootKey$\TeamFoundation\SourceControl\Checkin Policies] "YourPolicy"="$PackageFolder$\YourPolicy.dll"
VSIXプロジェクトで(GUIウィザードを使用して)source.extension.vsixmanifest
を変更します。
Microsoft.VisualStudio.Community [15.0,16.0)
Microsoft.VisualStudio.IntegratedShell [15.0,16.0)
Visual Studio core editor [15.0,16.0)
This GitHubリポジトリは、すべてをつなぎ合わせるのに役立ちました。 vsixに移行するときに見つけたいくつかの癖:
.settings
ファイルに設定する必要がありました。このキーをHKCUに追加することは私にとってうまくいきました:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\15.0\TeamFoundation\SourceControl\Checkin Policies
それが役に立てば幸い。ありがとう、ウィルセード