TFS 2015服务器端插件部署(使用VS 2013)

TFS 2015 server side plugin deployment (using VS 2013)

我正在使用 Visual Studio 2013 并编写了一个 TFS 2015 服务器端插件。本地创建了一个TFS 2015环境,并签入文件进行测试,发现一切正常

我想部署我的插件:按照 Internet 上的说明,我将插件代码的输出路径更改为:............\Program Files\Microsoft Team Foundation Server 14.0\ApplicationTier\WebServices\bin\Plugins。所以,我的 plugin.dll 和 plugin.pdb 文件都在这个位置。

这一步之后;我卡住了,我尝试转到团队资源管理器 -> 设置 -> 源代码管理(在团队项目下)-> 签入策略 -> 添加,但我找不到我的文件。

我需要帮助来部署我的插件。

签入策略必须部署到任何要使用它的人的本地机器上。

签入策略与服务器端插件不同。

您的服务器端插件将不会显示在“签入策略添加”对话框中。但是,当每个连接到部署插件的 TFS 服务器的客户端点击 Check In 按钮时,它将执行。根据插件代码,它将批准或拒绝签入。如果它拒绝签入,您可以向用户提供有关要修复的内容的消息。

这里有一个例子,如果代码审查者自称是上帝,就直接拒绝。您也可以查看评论部分并根据需要查找所需的元素。

using System;
using System.Diagnostics;
using System.Linq;
using Microsoft.TeamFoundation.Build.Server;
using Microsoft.TeamFoundation.Common;
using Microsoft.TeamFoundation.Framework.Server;
using Microsoft.TeamFoundation.WorkItemTracking.Server;
using System.Collections.Generic;
using Microsoft.TeamFoundation.VersionControl.Server;

    namespace TFSPlugin
    {
        public class FittingSoftwarePlugin : ISubscriber
        {
            public string Name { get { return this.GetType().Name; } }
            public SubscriberPriority Priority { get { return SubscriberPriority.Normal; } }
            public Type[] SubscribedTypes() { return new[] { typeof(CheckinNotification) }; }

            public EventNotificationStatus ProcessEvent(IVssRequestContext requestContext, NotificationType notificationType, object notificationEventArgs,
                                                        out int statusCode, out string statusMessage, out ExceptionPropertyCollection properties)
            {
                statusCode = 0;
                properties = null;
                statusMessage = String.Empty;

                try
                {
                    var checkinNotificationArgs = notificationEventArgs as CheckinNotification;
                    if (notificationType == NotificationType.DecisionPoint && checkinNotificationArgs != null)
                    {
                        var codeReviewer = checkinNotificationArgs.CheckinNote.Values.FirstOrDefault(v => v.Name.Equals("Code Reviewer"));
                        if (codeReviewer!=null && codeReviewer.Value.Equals("GOD", StringComparison.InvariantCultureIgnoreCase))
                        {
                            statusMessage = "GOD cannot be used as a code reviewer as he is not trustworthy!";
                            return EventNotificationStatus.ActionDenied;
                        }
                    }
                }
                catch (Exception e)
                {
                    // Log error
                }

                return EventNotificationStatus.ActionPermitted;
            }
        }
    }