Пользовательская политика регистрации TFS в Visual Studio 2017

Некоторое время назад я разработал собственную политику регистрации TFS, которая отлично работала с Visual Studio 2015. Теперь я установил 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"

Но, к сожалению, это не работает:

  • Если я открою настройки Team Project SourceControl, перейдите на вкладку "Политика регистрации" и попробуйте добавить... политику, MyCheckInPolicy не появляется 1
  • Если я открою командный проект, который уже использует эту политику регистрации и сделаю выше, я получаю сообщение об ошибке, сообщающее, что сборка (mycheckinpolicy) "не был зарегистрирован".

Конечно, я перезапустил IDE после изменения реестра, но даже перезагрузка моей машины не помогла.

Похоже, информация, которую я нашел до сих пор , говорит о том, что правила регистрации теперь должны быть частью расширения (vsix), в которое я не хочу верить.


Я предполагаю, что проблема связана с некоторыми ссылками, которые не могут быть решены при загрузке сборки в IDE.

MyCheckInPolicy проект ссылается на Microsoft.TeamFoundation.VersionControl.Client.dll v14.0 из папки VS2015 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer,
Я пытался ссылаться на соответствующие DLL из папок VS2017, но тогда сборка не работает в обеих IDE.

Я также попытался использовать пакет Nuget "Microsoft.TeamFoundation.VersionControl.All" v12.0.30723.2 вместо этого и развернул все файлы из выходного каталога (который, кажется, содержит все сборки пакета) в расположение, указанное в разделах реестра., Это дало тот же результат: политика не может быть загружена ни в VS2015, ни в VS2017.

Мы используем TFS 12.0.30723.0.


1 Так что кажется, что VS2017 даже не пытается загрузить сборку и не заботится о ключах реестра?

2 ответа

Решение

В Visual Studio 2017 происходят существенные изменения в расширяемости. Большая часть конфигурации реестра была перенесена в "частный" реестр:

Чтобы уменьшить влияние на реестр, Visual Studio теперь использует функцию RegLoadAppKey для хранения разделов реестра в частном двоичном файле в папке%VsAppDataFolder%\privateregistry.bin. В системном реестре остается только очень небольшое количество специфических для Visual Studio ключей. ( ссылка)

Определяя ключи реестра как часть файла.pkgdef в vsix, при установке VS 2017 будет (я предполагаю) записывать ключи в личный реестр, в отличие от фактического реестра, что было в предыдущих версиях VS. Это позволит подобрать политику.

Итак, вот шаги, которые я прошел, чтобы наши политики работали в VS 2017:

  1. Установите Visual Studio SDK (это можно сделать, изменив установку, если вы изначально не выбирали рабочую нагрузку).
  2. Добавьте новый проект VSIX к вашему решению политики регистрации
  3. Добавить .pkgdef файл в проект VSIX со следующим (это запись раздела реестра):

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

  4. изменять source.extension.vsixmanifest (с помощью мастера графического интерфейса) в проекте VSIX:

    1. Цели установки: Добавьте самую низкую поддерживаемую версию VS:
      • Microsoft.VisualStudio.Community [15.0,16.0)
      • Microsoft.VisualStudio.IntegratedShell [15.0,16.0)
    2. Активы:
      • Microsoft.VisualStudio.Assembly
        • Проект в текущем решении
        • Проект: выберите свой проект политики регистрации
      • Microsoft.VisualStudio.VsPackage
        • Файл в файловой системе
        • Путь: выберите файл.pkgdef, начиная с шага 3.
    3. Предпосылки: Visual Studio core editor [15.0,16.0)
  5. Сборка проекта VSIX и распространение / установка сгенерированного vsix

Этот репозиторий GitHub был полезен для объединения всего воедино. Некоторые причуды, которые я обнаружил при переходе на vsix:

  1. По умолчанию установки vsix теперь выполняются для каждого пользователя. Если вы используете VS под несколькими пользователями на одном компьютере, вам нужно будет установить его для каждого. В vsixmanifest есть возможность установить расширение для всех пользователей, но для этого требуется повышение прав.
  2. Наша политика регистрации использовала файл app.config, который не поддерживается в vsix. Я должен был перенести наши настройки в .settings файл.

Мне удалось добавить этот ключ в HKCU:

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

Надеюсь, поможет. Спасибо Уилсейд

Другие вопросы по тегам