2012-01-05 60 views
0

我已經通過編寫延伸PolicyBase(根據MSDN How To: Create Custom Check-in Policies in Visual Studio Team Foundation)的類創建了TFS的自定義簽入策略。重寫的Evaluate()方法是我的邏輯。如何控制何時對我的自定義簽入策略進行評估?

Evaluate()當用戶點擊TFS中的Check In按鈕時被調用,因爲這是我想要的。

然而,它也好像Evaluate()時被調用:

  1. Visual Studio的啓動並
  2. 用戶導航到掛起的更改選項卡,第一次(或者,如果這已經是活動標籤當VS啓動時)和
  3. 用戶在等待更改選項卡中有項目。

如何檢查什麼情況下評估被調用?我只想在用戶明確點擊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()有沒有辦法找出它在哪種情況下被調用?我可以避免在除了由簽到觸發的所有呼叫之外拋出對話。

+0

你可以給我們一些代碼。因爲afaik Evaluate()不應該一直被提到:「當用戶單擊Policies按鈕或嘗試登記或擱置操作時,簽入框架執行此方法。」 - http://msdn.microsoft.com/en-us/magazine/cc163320.aspx – Feroc 2012-01-05 15:08:37

+0

@Feroc:該文章對評估機制有點模糊。評估將始終在簽入或擱置前調用,並繪製簽入策略通道,但也可能在任何其他時間調用,以保持內部狀態爲最新。 – 2012-01-05 15:38:27

+0

@EdwardThomson:嗯......我之前制定了一項政策,不記得有這樣的行爲。或者在我的例子中,這可能並不重要,所以我沒有注意到。 – Feroc 2012-01-05 15:40:46

回答

1
  • Evaluate()不應顯示UI(愛德華湯姆森已經 提到的)。
  • Evaluate()如果有任何 問題應該只是創建失敗。

這將創建一個用戶可以雙擊的故障列表。然後可以使用雙擊失敗(由Activate()處理)來觸發UI組件的顯示。我還沒有嘗試過,但它看起來好像會起作用。

詳情請見以下MSDN論壇帖子:Prompting user from checkin policy occurs multiple times