Visual studio 在TFS2013中为代码审阅通知创建自定义签入后策略
我知道我们可以在TFS 2013中创建自定义签入策略,该策略将限制用户在没有代码检查的情况下签入代码 我在我们公司对开发人员有一个要求,在这里,我必须开发一些特定的文件(数据库更新)被检查到TFS,然后发送电子邮件通知给一组高级开发人员进行代码审查。此外,电子邮件通知应告知上次代码审查是何时执行的,由谁执行的 你知道如何着手解决这个问题吗。在过去,我创建了一个策略来在签入之前检查文件的有效性,我使用了PolicyBase和Evaluate方法来这样做,我不知道签入成功后可以捕获哪个类/方法来放置代码Visual studio 在TFS2013中为代码审阅通知创建自定义签入后策略,visual-studio,checkin-policy,Visual Studio,Checkin Policy,我知道我们可以在TFS 2013中创建自定义签入策略,该策略将限制用户在没有代码检查的情况下签入代码 我在我们公司对开发人员有一个要求,在这里,我必须开发一些特定的文件(数据库更新)被检查到TFS,然后发送电子邮件通知给一组高级开发人员进行代码审查。此外,电子邮件通知应告知上次代码审查是何时执行的,由谁执行的 你知道如何着手解决这个问题吗。在过去,我创建了一个策略来在签入之前检查文件的有效性,我使用了PolicyBase和Evaluate方法来这样做,我不知道签入成功后可以捕获哪个类/方法来放置
除了为文件有效性编写的代码外,我没有其他代码。我找不到任何关于入住后政策的有用帖子。或者,这可以在服务器本身上配置 您可以创建侦听器来侦听CheckInEvent,而不是签入策略。触发事件后,发送通知。这些服务器端插件正在实现,请参阅如何编写和调试它们 下面是来自的代码,显示了响应签入事件的代码的示例实现,您可以参考它:
namespace Sample.SourceControl.Server.PlugIns
{
public class CodeCheckInEventHandler : ISubscriber
{
public string Name
{
get { return "CodeCheckInEventHandler"; }
}
public SubscriberPriority Priority
{
get { return SubscriberPriority.Normal; }
}
public EventNotificationStatus ProcessEvent(TeamFoundationRequestContext requestContext, NotificationType notificationType, object notificationEventArgs, out int statusCode, out string statusMessage, out Microsoft.TeamFoundation.Common.ExceptionPropertyCollection properties)
{
statusCode = 0;
properties = null;
statusMessage = String.Empty;
try
{
if (notificationType == NotificationType.Notification && notificationEventArgs is WorkItemChangedEvent)
{
CheckinNotification ev = notificationEventArgs as CheckinNotification;
TeamFoundationApplication.Log(string.Format("New Changeset was checked in by {0}. ID: {1}, comments: {2}", ev.ChangesetOwnerName, ev.Changeset, ev.Comment), 123, System.Diagnostics.EventLogEntryType.Information);
}
}
catch (Exception ex)
{
TeamFoundationApplication.LogException("Sample.SourceControl.Server.PlugIns.CodeCheckInEventHandler encountered an exception", ex);
}
return EventNotificationStatus.ActionPermitted;
}
public Type[] SubscribedTypes()
{
return new Type[1] { typeof(CheckinNotification) };
}
}
}