Пользовательская политика регистрации 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:
- Установите Visual Studio SDK (это можно сделать, изменив установку, если вы изначально не выбирали рабочую нагрузку).
- Добавьте новый проект VSIX к вашему решению политики регистрации
Добавить
.pkgdef
файл в проект VSIX со следующим (это запись раздела реестра):[$RootKey$\TeamFoundation\SourceControl\Checkin Policies] "YourPolicy"="$PackageFolder$\YourPolicy.dll"
изменять
source.extension.vsixmanifest
(с помощью мастера графического интерфейса) в проекте VSIX:- Цели установки: Добавьте самую низкую поддерживаемую версию VS:
Microsoft.VisualStudio.Community [15.0,16.0)
Microsoft.VisualStudio.IntegratedShell [15.0,16.0)
- Активы:
- Microsoft.VisualStudio.Assembly
- Проект в текущем решении
- Проект: выберите свой проект политики регистрации
- Microsoft.VisualStudio.VsPackage
- Файл в файловой системе
- Путь: выберите файл.pkgdef, начиная с шага 3.
- Microsoft.VisualStudio.Assembly
- Предпосылки:
Visual Studio core editor [15.0,16.0)
- Цели установки: Добавьте самую низкую поддерживаемую версию VS:
- Сборка проекта VSIX и распространение / установка сгенерированного vsix
Этот репозиторий GitHub был полезен для объединения всего воедино. Некоторые причуды, которые я обнаружил при переходе на vsix:
- По умолчанию установки vsix теперь выполняются для каждого пользователя. Если вы используете VS под несколькими пользователями на одном компьютере, вам нужно будет установить его для каждого. В vsixmanifest есть возможность установить расширение для всех пользователей, но для этого требуется повышение прав.
- Наша политика регистрации использовала файл app.config, который не поддерживается в vsix. Я должен был перенести наши настройки в
.settings
файл.
Мне удалось добавить этот ключ в HKCU:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\15.0\TeamFoundation\SourceControl\Checkin Policies
Надеюсь, поможет. Спасибо Уилсейд