Visual Studio 2017中的自定义TFS签入策略

时间:2017-03-21 09:41:50

标签: c# visual-studio 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,但即使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甚至没有尝试加载程序集而不关心注册表项?

2 个答案:

答案 0 :(得分:18)

在Visual Studio 2017中,breaking changes具有可扩展性。大部分注册表配置已移至“私有”注册表中:

  

为了减少对注册表的影响,Visual Studio现在使用了   RegLoadAppKey函数用于将注册表项存储在专用二进制文件中   在%VsAppDataFolder%\ privateregistry.bin下。只有极少数   特定于Visual Studio的密钥保留在系统注册表中。 (link

通过将注册表项定义为vsix中的.pkgdef文件的一部分,在安装时VS 2017将(我假设)将密钥写入私有注册表而不是实际的注册表,这是以前版本中的情况。 VS.这将允许政策被拿起。

因此,以下是我在VS 2017中实施政策的步骤:

  1. 安装Visual Studio SDK(如果您最初没有选择工作负载,可以通过modifying安装完成。)
  2. 向您的签入政策解决方案
  3. 添加新的 VSIX项目
  4. 使用以下内容将.pkgdef文件添加到VSIX项目中(这是注册表项条目):

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

  5. 在VSIX项目中修改source.extension.vsixmanifest(使用GUI向导):

    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)
  6. 构建VSIX项目并分发/安装生成的vsix
  7. This GitHub回购有助于拼凑所有东西。我在迁移到vsix时发现了一些怪癖:

    1. 默认情况下,vsix安装现在是每用户。如果您在同一台计算机上的多个用户下运行VS,则需要为每个用户安装VS.在vsixmanifest中有一个选项可以为所有用户安装扩展,但这需要提升。
    2. 我们的签入策略使用了app.config文件,vsix中不支持该文件。我必须将migrate我们的设置设置为.settings文件。

答案 1 :(得分:3)

我向HKCU添加了这个密钥:

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

希望它有所帮助。 谢谢, Wilsade