我通过编写扩展PolicyBase
的类(根据MSDN How To: Create Custom Check-in Policies in Visual Studio Team Foundation)为TFS创建了自定义签到策略。被覆盖的Evaluate()
方法是我的逻辑。
Evaluate()
,这很棒,因为这就是我想要的。
然而,在以下情况下似乎也会调用Evaluate()
:
如何检查在什么情况下调用Evaluate?我只想在用户明确点击TFS中的Check In按钮时调用Evaluate。
我使用的实际评估方法相当复杂,但我将其简化为仍然存在同样问题的方法:
public override PolicyFailure[] Evaluate()
{
List<PolicyFailure> policyFailures = new List<PolicyFailure>();
if (_isPolicyEnabled)
{
if (PendingCheckin.PendingChanges.Comment.Contains("*"))
{
string msg = "Star in comment";
MessageBox.Show(msg);
policyFailures.Add(new PolicyFailure(msg, this));
}
}
return policyFailures.ToArray();
}
使用上面的代码,如果签到注释中有一个星号,并且有待更改,关闭Visual Studio,当您重新打开它时,只要导航到Pending Changes选项卡就会抛出MessageBox
在我的情况下使用签入策略的方式是我检查用户的注释以获取对另一个系统中项目的引用。如果它们不存在,那么我会抛出一个交互式对话框,向用户显示可以过滤和选择的项目列表。然后将这些插入到他们的登记注释中。在Evaluate()
中是否有办法找出它被称为哪种情况?我可以避免在除了由登记处触发的所有电话之外抛出对话框。
答案 0 :(得分:1)
Evaluate()
不应该显示UI(就像爱德华汤姆森已经
所提到的)。Evaluate()
应该创建失败
的问题。这将创建一个用户可以双击的失败列表。然后可以使用双击失败(由Activate()
处理)来触发要显示的UI组件。我还没有尝试过,但它似乎很有用。
详情请参阅此MSDN论坛帖子:Prompting user from checkin policy occurs multiple times。