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;
}
}
}
我正在使用 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;
}
}
}