您的服務器端插件不會顯示在簽入策略添加對話框中。但是,當連接到部署插件的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;
}
}
}
解釋真的很好,謝謝。 –