0

問:如何確定項目成功但未構建(無更改)?DTE構建事件:成功但未構建的通知

我知道,我可以利用Visual Studio包打入生成事件。

_dte.Events.BuildEvents.OnBuild* += **; 

*是事件處理程序名稱的其餘部分,**是事件處理程序的名稱。

有兩種類型的成功代碼,構建項目時:

========== Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped ========== 

========== Build: 1 succeeded, 0 failed, 1 up-to-date, 0 skipped ========== 

第一個成功建立,但沒有改變是必要的,而後者則有變化,並內置成功。

DTE構建成功參數表明構建成功,而不是失敗。如果不存在錯誤,則無論更改與否,結果總是如此。

不幸的是,沒有任何表明成功但沒有建立或成功和建立的論據。有成功嗎?

關於SO的現有問題,例如28019853629125不能歸結爲這種粒度/區別。

如何以編程方式確定項目在生成請求中成功但未生成(是最新的)?

回答

1

的IVsBuildStatusCallback.BuildEnd方法提供比DTE相同的信息,所以也沒什麼幫助:

true如果生成操作成功完成。在最新的檢查之後,當項目配置是最新的時,fSuccess被設置爲true,當項目配置不是最新時,fSuccess被設置爲false。

一些解決方法,我可以想像:

  • 有一個IVsBuildableProjectCfg.StartUpToDateCheck方法,可以構建之前調用,以確定是否一個項目是最新的更新。您可以提供一個實現IVsOutputWindowPane接口並解析輸出的類(有些容易出錯,受本地化問題影響)

  • 如果項目是最新的,編譯後的輸出dll或exe的日期時間不會'在構建之後不會改變。

在這兩種情況下,您都需要在構建之前和構建之後執行操作。

+0

我將上面的答案標記爲答案,但方法不同。我必須在輸出程序集之前和之後獲得DateTime標記並對它們進行比較。我爲此使用了IvsOutputWindowPane,而不是IVsBuildableProjectCfg。我猜不同的人爲不同的人。檢索輸出構建窗口文本不是一個可行的解決方案。 – 2015-02-25 22:48:57