web-dev-qa-db-ja.com

Visual Studio2017のカスタムTFSチェックインポリシー

少し前に、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"
_

しかし残念ながら、これは機能しません。

  • チームプロジェクトのSourceControl設定を開いた場合は、[チェックインポリシー]タブに移動して、 Add... ポリシー、MyCheckInPolicy表示されません1
  • このチェックインポリシーを使用するチームプロジェクトを既に開いて上記を実行すると、アセンブリ(mycheckinpolicy)が「登録されていません」というエラーメッセージが表示されます。

もちろん、レジストリの変更後に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はアセンブリをロードしようとさえせず、レジストリキーを気にしないようですか?

15
René Vogt

Visual Studio 2017には、拡張性に対する 重大な変更 があります。レジストリ構成の多くは「プライベート」レジストリに移動されました。

レジストリへの影響を減らすために、Visual StudioはRegLoadAppKey関数を使用して、レジストリキーを%VsAppDataFolder%\ privateregistry.binの下のプライベートバイナリファイルに格納するようになりました。非常に少数のVisualStudio固有のキーのみがシステムレジストリに残ります。 ( リンク

レジストリキーをvsixの.pkgdefファイルの一部として定義することにより、インストール時にVS 2017は、以前のバージョンのVSの場合のように、実際のレジストリではなく、プライベートレジストリにキーを書き込みます(私は推測します)。これにより、ポリシーを選択できるようになります。

したがって、VS2017でポリシーを機能させるために実行した手順は次のとおりです。

  1. Visual Studio SDKをインストールします(最初にワークロードを選択しなかった場合は、インストールを 変更 することで実行できます)。
  2. 新しいVSIXプロジェクトをチェックインポリシーソリューションに追加します
  3. .pkgdefファイルを次のようにVSIXプロジェクトに追加します(これはレジストリキーエントリです)。

    [$RootKey$\TeamFoundation\SourceControl\Checkin Policies] "YourPolicy"="$PackageFolder$\YourPolicy.dll"

  4. VSIXプロジェクトで(GUIウィザードを使用して)source.extension.vsixmanifestを変更します。

    1. ターゲットのインストール:サポートされている最低のVSバージョンを追加します:
      • Microsoft.VisualStudio.Community [15.0,16.0)
      • Microsoft.VisualStudio.IntegratedShell [15.0,16.0)
    2. 資産:
      • Microsoft.VisualStudio.Assembly
        • 現在のソリューションのプロジェクト
        • プロジェクト:チェックインポリシープロジェクトを選択します
      • Microsoft.VisualStudio.VsPackage
        • ファイルシステム上のファイル
        • パス:手順3から.pkgdefファイルを選択します。
    3. 前提条件:Visual Studio core editor [15.0,16.0)
  5. VSIXプロジェクトをビルドし、生成されたvsixを配布/インストールします

This GitHubリポジトリは、すべてをつなぎ合わせるのに役立ちました。 vsixに移行するときに見つけたいくつかの癖:

  1. デフォルトでは、vsixのインストールはユーザーごとになりました。同じマシン上で複数のユーザーの下でVSを操作する場合は、それぞれにインストールする必要があります。 vsixmanifestには、すべてのユーザーに拡張機能をインストールするオプションがありますが、これには昇格が必要です。
  2. チェックインポリシーでapp.configファイルが使用されましたが、これはvsixではサポートされていません。 移行 設定を.settingsファイルに設定する必要がありました。
18
Pero P.

このキーをHKCUに追加することは私にとってうまくいきました:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\15.0\TeamFoundation\SourceControl\Checkin Policies

それが役に立てば幸い。ありがとう、ウィルセード

3
Wilsade