我已經通過編寫延伸PolicyBase
(根據MSDN How To: Create Custom Check-in Policies in Visual Studio Team Foundation)的類創建了TFS的自定義簽入策略。重寫的Evaluate()
方法是我的邏輯。如何控制何時對我的自定義簽入策略進行評估?
Evaluate()
當用戶點擊TFS中的Check In按鈕時被調用,因爲這是我想要的。
然而,它也好像Evaluate()
時被調用:
- Visual Studio的啓動並
- 用戶導航到掛起的更改選項卡,第一次(或者,如果這已經是活動標籤當VS啓動時)和
- 用戶在等待更改選項卡中有項目。
如何檢查什麼情況下評估被調用?我只想在用戶明確點擊TFS中的簽入按鈕時調用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()
有沒有辦法找出它在哪種情況下被調用?我可以避免在除了由簽到觸發的所有呼叫之外拋出對話。
你可以給我們一些代碼。因爲afaik Evaluate()不應該一直被提到:「當用戶單擊Policies按鈕或嘗試登記或擱置操作時,簽入框架執行此方法。」 - http://msdn.microsoft.com/en-us/magazine/cc163320.aspx – Feroc 2012-01-05 15:08:37
@Feroc:該文章對評估機制有點模糊。評估將始終在簽入或擱置前調用,並繪製簽入策略通道,但也可能在任何其他時間調用,以保持內部狀態爲最新。 – 2012-01-05 15:38:27
@EdwardThomson:嗯......我之前制定了一項政策,不記得有這樣的行爲。或者在我的例子中,這可能並不重要,所以我沒有注意到。 – Feroc 2012-01-05 15:40:46