不久前,我开发了一个自定义的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"
但不幸的是,这不起作用:
MyCheckInPolicy
不会出现 1 mycheckinpolicy
)“尚未注册”。当然,我在注册表更改后重新启动了IDE,但即使rebooting我的机器也无法帮助。
到目前为止我发现的information 似乎表明签到政策现在必须是扩展程序(vsix)的一部分,我不想相信。< / p>
我想这个问题来自一些在程序集加载到IDE时无法解析的引用。
MyCheckInPolicy
项目引用VS2015文件夹Microsoft.TeamFoundation.VersionControl.Client.dll
中的C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer
v14.0。
我尝试从VS2017文件夹中引用相应的dll,但是然后程序集在两个 IDE中都不起作用。
我还尝试使用Nuget软件包“Microsoft.TeamFoundation.VersionControl.All”v12.0.30723.2,并将输出目录中的所有文件(似乎包含软件包的所有程序集)部署到上面提到的位置注册表项。这具有相同的结果:无法在VS2015和VS2017中加载策略。
我们正在使用 TFS 12.0.30723.0 。
1 所以看起来VS2017甚至没有尝试加载程序集而不关心注册表项?
答案 0 :(得分:18)
在Visual Studio 2017中,breaking changes具有可扩展性。大部分注册表配置已移至“私有”注册表中:
为了减少对注册表的影响,Visual Studio现在使用了 RegLoadAppKey函数用于将注册表项存储在专用二进制文件中 在%VsAppDataFolder%\ privateregistry.bin下。只有极少数 特定于Visual Studio的密钥保留在系统注册表中。 (link)
通过将注册表项定义为vsix中的.pkgdef文件的一部分,在安装时VS 2017将(我假设)将密钥写入私有注册表而不是实际的注册表,这是以前版本中的情况。 VS.这将允许政策被拿起。
因此,以下是我在VS 2017中实施政策的步骤:
使用以下内容将.pkgdef
文件添加到VSIX项目中(这是注册表项条目):
[$RootKey$\TeamFoundation\SourceControl\Checkin Policies]
"YourPolicy"="$PackageFolder$\YourPolicy.dll"
在VSIX项目中修改source.extension.vsixmanifest
(使用GUI向导):
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
文件。答案 1 :(得分:3)
我向HKCU添加了这个密钥:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\15.0\TeamFoundation\SourceControl\Checkin Policies
希望它有所帮助。 谢谢, Wilsade