首页 > 解决方案 > tfs 2013 自定义签入策略不可见

问题描述

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

   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 添加签入策略,但新策略在列表中不可见

视觉工作室

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

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

标签: visual-studiotfs

解决方案


确实没有与 Team Foundation Server 版本一起使用的签入策略的概念。相反,这些是 Visual Studio 的插件。因此,您正在为恰好连接到 Team Foundation Server 的特定版本的 Visual Studio 构建插件。

因此,每个版本的 Visual Studio 都需要自己的程序集版本,根据正确版本的 .NET 和正确版本的 Team Foundation Server 客户端对象模型编译,该版本与 Team Explorer“扩展”附带的版本相匹配视觉工作室。

然后,将包含该策略的特定程序集的不同路径注册到您支持的 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...

所有细节都在这篇博文中。

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

还有一个针对多个 Visual Studio 版本的示例项目

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

<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>

您可以使用类似的技巧为更高版本的 Team Explorer 引用不同的 NuGet 版本。自 2013 年以来,TFS 聚合器项目针对每个版本的客户端对象模型构建,我们动态包含一个目标文件来设置引用和 nuget 依赖项


推荐阅读