【问题标题】:How to create PolicyEnvelope for a custom checkin policy in visual studio 2010?如何在 Visual Studio 2010 中为自定义签入策略创建策略信封?
【发布时间】:2013-02-20 04:33:57
【问题描述】:

我在 Visual Studio 2010 中为 TFS 2010 创建了一个自定义签入策略。该策略本身运行良好。现在,我正在尝试从代码中应用自定义策略。以下是我的代码:

try
        {
            var projectCollectionUri = new Uri("https://mydomain.com/tfs");
            var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(projectCollectionUri, new UICredentialsProvider());
            projectCollection.EnsureAuthenticated();

            var vcs = projectCollection.GetService<VersionControlServer>();

            var teamProject = vcs.GetTeamProject("myProject");

            foreach (PolicyType policyType in Workstation.Current.InstalledPolicyTypes)
            {
                if (policyType.Name.ToLower().Contains("MyPolicyType"))
                {
                    //teamProject.SetCheckinPolicies(new PolicyEnvelope[] { new PolicyEnvelope(workItemPolicy, policyType) });
                    //break;
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

我卡在这条线上:

//teamProject.SetCheckinPolicies(new PolicyEnvelope[] { new PolicyEnvelope(workItemPolicy, policyType) });

如何为我的自定义政策创建政策信封?我引用的代码来自以下位置: http://bartwullems.blogspot.com/2012/02/team-foundation-server-2010-enable.html

【问题讨论】:

  • 您的政策是否实施IPolicyDefenition

标签: tfs checkin-policy


【解决方案1】:

您只需将示例中的 WorkItemPolicy 替换为您的策略:

例如:

var myPolicy = new MyPolicy();

foreach (PolicyType policyType in Workstation.Current.InstalledPolicyTypes)
{
    if (policyType.Name == myPolicy.Type)
    {
        teamProject.SetCheckinPolicies(
            new PolicyEnvelope[]
            {
                new PolicyEnvelope(myPolicy, policyType)
            });
        break;
    }
}

如果您的控制台应用程序中没有包含您的策略的程序集,您可能需要添加对它的引用。

【讨论】:

  • 哦,是的...我错过了简单的事情。您的解决方案效果很好。但是,我在这里的方法是删除所有现有的签入策略,并且只启用此代码中指定的那个。我要做的是,我编写的代码应该将指定的签入策略添加到现有列表中,而不是用指定的策略替换整个列表。
  • 我明白了。 teamProject.GetCheckinPolicies() 返回 PolicyEnvolope 对象的数组。然后在“if”块中,我将我的策略添加到此数组对象,然后将此数组对象传递给teamProject.SetCheckinPolicies() 将完成我需要的工作。感谢您的帮助,戴夫。
猜你喜欢
  • 2017-08-12
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 2018-05-15
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多