tfs 2013 自定义签入策略不可见

时间:2021-02-15 10:40:38

标签: visual-studio tfs

我正在尝试在 TFS 2013 中创建自定义签入策略。按照这个示例,我在下面创建了 WorkitemStateControlPolicy 类 https://blog.devart.com/creating-tfs-custom-check-in-policy.html

   namespace WIStateControlPolicy
    {
        [Serializable]
        public sealed class WorkitemStateControlPolicy : PolicyBase
        {
            [NonSerialized]
            private IPendingCheckin pendingCheckin;
    
            public const string ClosedStatus = "System.Reason";
                        ........
                        ........
         }
     }

我构建了这个项目,创建了 WorkitemStateControl.dll。我正在使用的注册表项:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0_Config\TeamFoundation\SourceControl\Checkin Policies]

"WorkitemStateControl"="c:\\Users\\me\\Desktop\\dll\\WorkitemStateControl.dll"

然后我检查了 Visual Studio 2015 添加签入策略,但新策略在列表中不可见

visual studio

我也试过这个注册表路径: (HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\TeamFoundation\SourceControl\CheckinPolicies) 但问题没有改变。

我的问题是,为什么看不到新的签入政策?我应该更改 tfs 服务器上的任何内容吗?

1 个答案:

答案 0 :(得分:1)

实际上并没有与 Team Foundation Server 版本配合使用的签入策略的概念。相反,这些是 Visual Studio 的插件。因此,您正在为碰巧连接到 Team Foundation Server 的特定版本的 Visual Studio 构建插件。

这样,每个版本的 Visual Studio 都需要自己的程序集版本,根据正确的 .NET 版本和与团队资源管理器附带的版本匹配的正确版本的 Team Foundation Server 客户端对象模型进行编译“扩展”适用于 Visual Studio。

然后,您将包含策略的特定程序集的不同路径注册到您支持的 Visual Studio 版本的每个注册表树中。哦,别忘了注册 x86 和 x64 注册表树:)

Windows Registry Editor Version 5.00

//v12
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\TeamFoundation\SourceControl\Checkin Policies]
"JesseHouwing.CheckinPolicies"="C:\Program Files(x86)\\MyCompany\\Checkin Policies\\v12.0\\JesseHouwing.CheckinPolicies.dll"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\12.0\TeamFoundation\SourceControl\Checkin Policies]
"JesseHouwing.CheckinPolicies"="C:\Program Files(x86)\\MyCompany\\Checkin Policies\\v12.0\\JesseHouwing.CheckinPolicies.dll"

//v14
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\TeamFoundation\SourceControl\Checkin Policies]
"JesseHouwing.CheckinPolicies"="C:\Program Files(x86)\\MyCompany\\Checkin Policies\\v14.0\\JesseHouwing.CheckinPolicies.dll"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\TeamFoundation\SourceControl\Checkin Policies]
"JesseHouwing.CheckinPolicies"="C:\Program Files(x86)\\MyCompany\\Checkin Policies\\v14.0\\JesseHouwing.CheckinPolicies.dll"

etc...

All the details are in this blog post.

VISUAL STUDIO PROJECT TYPE   CPU     .NET VERSION TFS OM VERSION VISUAL STUDIO VERSION
2017          Class Library  AnyCPU  4.6          15.0.0.0       v15.0
2015          Class Library  AnyCPU  4.6          14.0.0.0       v14.0
2013          Class Library  AnyCPU  4.5          12.0.0.0       v12.0
2012          Class Library  AnyCPU  4.0          11.0.0.0       v11.0
2010          Class Library  AnyCPU  4.0          10.0.0.0       v10.0
2008          Class Library  AnyCPU  3.0           9.0.0.0        v9.0
2005          Class Library  AnyCPU  2.0           8.0.0.0        v8.0

还有一个 sample project that targets multiple Visual Studio Versions

在这个项目中,我手动调整了项目文件,以使用 choose/when 构造根据所选的 Visual Studio 版本动态引用客户端对象模型的版本:

<Choose>
    <When Condition="'$(Configuration)' == 'VS2013'">
      <ItemGroup>
        <Reference Include="Microsoft.TeamFoundation.VersionControl.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
        <Reference Include="Microsoft.TeamFoundation.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
        <Reference Include="Microsoft.TeamFoundation, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
      </ItemGroup>
    </When>
    <When Condition="'$(Configuration)' == 'VS2012'">
      <ItemGroup>
        <Reference Include="Microsoft.TeamFoundation.VersionControl.Client, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
        <Reference Include="Microsoft.TeamFoundation.Client, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
        <Reference Include="Microsoft.TeamFoundation, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
      </ItemGroup>
    </When>
    <When Condition="'$(Configuration)' == 'VS2010'">
      <ItemGroup>
        <Reference Include="Microsoft.TeamFoundation.VersionControl.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
        <Reference Include="Microsoft.TeamFoundation.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
        <Reference Include="Microsoft.TeamFoundation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
      </ItemGroup>
    </When>
    <Otherwise>
      <ItemGroup>
        <Reference Include="Microsoft.TeamFoundation.VersionControl.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
        <Reference Include="Microsoft.TeamFoundation.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
        <Reference Include="Microsoft.TeamFoundation, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
      </ItemGroup>
    </Otherwise>
  </Choose>

您可以使用类似的技巧为更高版本的团队资源管理器引用不同的 NuGet 版本。 The TFS Aggregator project is built against every version of the Client Object Model since 2013 and we dynamically include a targets file to setup the references and nuget dependencies