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

Visual studio 2013 TFS 2015服务器端插件部署(使用VS 2013),visual-studio-2013,plugins,deployment,tfs,tfs-2015,Visual Studio 2013,Plugins,Deployment,Tfs,Tfs 2015,我正在使用Visual Studio 2013,并编写了一个TFS 2015服务器端插件。创建了一个本地TFS 2015环境并签入文件进行测试,我发现它工作正常 我想部署我的插件:遵循Internet上的说明,我将插件代码的输出路径更改为:………程序文件\微软Team Foundation Server 14 \应用层\ Web服务\bin \插件。因此,我的plugin.dll和plugin.pdb文件就在这个位置 在此步骤之后;我被卡住了,我试图进入团队资源管理器->设置->源代码管理(在团

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

我想部署我的插件:遵循Internet上的说明,我将插件代码的输出路径更改为:………程序文件\微软Team Foundation Server 14 \应用层\ Web服务\bin \插件。因此,我的plugin.dll和plugin.pdb文件就在这个位置

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


我需要帮助来部署插件。

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


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

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


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

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

下面是一个示例,如果代码审阅者被称为上帝,那么它会拒绝。如果愿意,您还可以查看注释部分并查找所需的元素

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

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

下面是一个示例,如果代码审阅者被称为上帝,那么它会拒绝。如果愿意,您还可以查看注释部分并查找所需的元素

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

正如我所说,我有一个本地TFS,我正在尝试在我的机器上部署它。我不能编写一个服务器端插件来强制用户提交一条特定的提交消息吗?例如我希望提交消息包含问题编号。可能吗?如果你知道它是如何工作的,你能带我完成这个过程吗?我说,我有一个本地TFS,我正试图在我的机器上部署它。我不能编写一个服务器端插件来强制用户提交一条特定的提交消息吗?例如我希望提交消息包含问题编号。可能吗?如果你知道它是如何工作的,你能带我完成这个过程吗