阻止政策失败的签到

时间:2015-02-27 16:53:56

标签: visual-studio-2012 tfs2010 tfs-sdk tfvc checkin-policy

我创建了签到政策from this MSDN article作为示例(代码只是复制/粘贴)。

这很好用,当我尝试办理登机手续时会显示,但它会显示为警告。所以我可以通过再次按下Check In来忽略它。如何更改URL中列出的代码,以便它返回错误而不是警告。我无法在PolicyFailure上看到任何属性来执行此操作。

基本上我希望它看起来像这个截图中的错误: enter image description here

Image Source

编辑:以下是我正在使用的确切代码。现在它稍微修改了原始来源,但没有任何大规模的方式,我不会想到。不幸的是我无法发布截图,但我会尝试描述我所做的一切。

所以我从下面的代码中获得了一个DLL,我已将其添加到C:\ TFS \ CheckInComments.dll的文件夹中。我在Checkin Policies下添加了一个注册表项,其中包含DLL的路径,字符串值名称与我的DLL相同(减去.dll)。在源代码管理下的项目设置中,我添加了此签入策略。

这一切似乎都很好,如果我尝试办理登机手续,它会显示一条警告,上面写着“请提供一些关于办理登机手续的意见”,这是我的期望,我想要的是它如果不满足任何政策,停止办理登机手续,但我仍然希望用户能够在必要时选择覆盖。目前,即使有警告,如果我点击“检入”按钮,它也会成功签入代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace CheckInComments
{
    [Serializable]
    public class CheckInComments : PolicyBase
    {
        public override string Description
       {
            get
            { 
                return "Remind users to add meaningful comments to their checkins";

            }
        }

        public override string InstallationInstructions
        { 
            get { return "To install this policy, read InstallInstructions.txt"; } 
        }

        public override string Type
        {
            get { return "Check for Comments Policy"; }
        }


        public override string TypeDescription
        {
            get
            {
                return "This policy will prompt the user to decide whether or not they should be allowed to check in";
            }
        }

        public override bool Edit(IPolicyEditArgs args)
        {

            return true;
        }


        public override PolicyFailure[] Evaluate()
        {
            string proposedComment = PendingCheckin.PendingChanges.Comment;
            if (String.IsNullOrEmpty(proposedComment))
            {
                PolicyFailure failure = new PolicyFailure("Please provide some comments about your check-in", this);
                failure.Activate();

                return new PolicyFailure[1]
                {
                    failure
                };
            }
            else
            {
                return new PolicyFailure[0];
            }
        }

        public override void Activate(PolicyFailure failure)
        {
            MessageBox.Show("Please provide comments for your check-in.", "How to fix your policy failure");
        }

        public override void DisplayHelp(PolicyFailure failure)
        {
            MessageBox.Show("This policy helps you to remember to add comments to your check-ins", "Prompt Policy Help");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

签到策略将始终返回警告,如果您的用户有权忽略它们,则可以。

用户始终可以覆盖策略。您可以查询TFS仓库,以生成违反策略的用户及其提供的违规原因的报告。或者在有人忽略这些礼貌警告时设置警报。

无法从政策本身强制执行此操作。仅限服务器端插件as described by Neno in the post you quoted。这样的服务器端插件也可以在2012年或2010年创建。 process is explained here

答案 1 :(得分:0)

我刚刚通过打开项目的代码分析来解决该问题-右键单击项目,单击属性,转到代码分析,选择“配置”下拉菜单,然后选择“所有配置”,然后选择“启用代码分析”在构建中”。

进行构建,并确保没有错误/警告。

这将使您摆脱所有需要在构建时进行代码分析的策略。