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