2010-08-24 63 views
5

我們目前正在使用TFS 2008進行源代碼控制和持續集成。如何在基於FXCop的TFS構建失敗警告

我們使用FXCop檢查性能和安全警告。建築師或高級開發人員在衝刺結束時或交付之前運行FX Cop。

我們希望它運行的CI的一部分,如果有警告構建失敗,什麼是做到這一點的最好方法是什麼?

回答

5

我一直在做類似的事情。即使這個問題有點老,我希望它會幫助你。

我開始了最喜歡的 - 通過使調用FxCopCmd一個生成後事件。

就我而言,我想要的代碼的只是一小部分,一些內置的規則,也有一些自定義規則(在一個.dll)

我用了一個.fxcop項目文件中查找該 - 通過GUI配置所有我想要的,然後在生成後事件中將FxCopCmd指向項目文件。

大多數情況下,它運行得很好,但規則違規僅作爲警告出現。 「將警告視爲錯誤」選項似乎並不適用於此,因此我必須想出一個不同的解決方案。

什麼最終對我最有效的是基於我偶然發現的博客文章。

我修改了項目文件以添加兩個新事件。

我有一些額外的參數和東西的FxCop的,但它的要點是:

1: <PropertyGroup> 
    2: <FxCopResults>$(ProjectDir)obj\$(Configuration)\FxCopResults.xml</FxCopResults> 
    3: <PostBuildEvent>"%25ProgramFiles%25\Microsoft FxCop 10.0\FxCopCmd.exe" /file:"$(TargetPath)" /console /out:"$(ProjectDir)obj\$(ConfigurationName)\FxCopResults.xml"</PostBuildEvent> 
    4: </PropertyGroup> 
    5: <Target Name="BeforeBuild"> 
    6: <Delete Files="$(FxCopResults)" ContinueOnError="true" /> 
    7: </Target> 
    8: <Target Name="AfterBuild"> 
    9: <Error Text="One or more FxCop warnings occurred." Condition="Exists('$(FxCopResults)')" /> 
    10: </Target> 

的一般流程是這樣的:

  1. (被觸發構建過程)
  2. 構建開始之前,先前的FxCop結果(如果存在)被清除。
  3. 預構建事件被觸發
  4. (開始構建)
  5. 生成後事件被觸發(運行FxCopCmd)
  6. 生成後完成後,如果有FxCop的結果,錯誤被提出。
  7. (BUILD過程完成)

現在,如果FxCop的分析生成 - 例如 - 4個違反規則,您的構建將產生4個警告和1個錯誤。

我希望這會有所幫助。

6

你可以看看的code analysis features within Visual Studio,它支持在持續集成環境中使用。

+0

難道這隻適用於VS的Premium或Ultimate版本嗎? – 2010-12-22 18:56:04

+0

[...代碼分析...從Visual Studio Premium或Visual Studio Ultimate](http://msdn.microsoft.com/zh-cn/library/3z0aeatx%28v=vs.100%29.aspx) – 2012-01-31 22:56:18

3

假設你通過的MSBuild和常規項目/解決方案的構建,可以配置的FxCop爲每個版本(客戶端和服務器)的一部分運行。在項目的屬性對話框中,查看「代碼分析」選項卡。請注意,這可以針對調試和發佈版本單獨設置,因此,如果您的開發人員的工作更輕鬆,那麼您可以將它們設置爲發佈版本的錯誤。

這些FxCop的設置允許您定義違法行爲出現的錯誤,而不是在構建警告。你也可能希望在簽入有效之前啓用需要代碼分析的TFS策略,並使用一組定義好的規則運行 - 這將通過強制開發人員在簽入之前修復衝突來爲你節省一些紅色版本。

我不建議打開所有這些事情上 - 如果你瞄準了這個質量水平(這是不壞主意),這是很好的做多,您可以預先簽入。