2012-09-27 49 views
1

我需要幫助您在解決方案中包含的所有cs文件上運行stylecop任務。 請讓我知道它的可能和如何? 現在我可以在一個文件上運行它,但不能解決問題。在解決方案上運行MSbuild樣式的cop擴展任務

<CreateItem Include="$(RootPath)\**\*.cs"> 
    <Output TaskParameter="Include" ItemName="StyleCopFiles"/> 
</CreateItem> 

<MSBuild.ExtensionPack.CodeQuality.StyleCop 
      TaskAction="Scan" 
      ShowOutput="true" 
      ForceFullAnalysis="true" 
      CacheResults="false" 
      SourceFiles="@(StyleCopFiles)" 
      logFile="$(OutDir)\StyleCopLog.txt" 
      SettingsFile="$(MSBuildStartupDirectory)\..\Settings.StyleCop" 
      ContinueOnError="false"> 
      <Output TaskParameter="Succeeded" PropertyName="AllPassed"/> 
      <Output TaskParameter="ViolationCount" PropertyName="Violations"/> 
      <Output TaskParameter="FailedFiles" ItemName="Failures"/> 
    </MSBuild.ExtensionPack.CodeQuality.StyleCop> 

回答

3

您是否考慮過自動運行StyleCop規則作爲項目構建過程的一部分?這不會在解決方案級別運行所有規則,而是在項目級別運行。我更喜歡這種方法,因爲規則將在您構建項目/解決方案時運行,並將在「錯誤列表」面板中顯示爲「警告」(雙擊以導航到違規代碼行)。根據項目對項目進行配置可能看起來很痛苦,但對於我們的單元測試項目,我們有一套不同的StyleCop規則,這允許我們單獨配置它們。

此外,您不必顯式添加MSBuild任務到您的構建腳本,因爲構建項目將自動執行StyleCop規則。

另外值得一提的是,我使用的NuGet包:StyleCop.MSBuild(版本4.7.17.1),並使用相對路徑從我的.csproj文件中像這樣內引用包:

<Project> 
    <Import Project="..\Packages\StyleCop.MSBuild.4.7.17.1\tools\StyleCop.targets" /> 
</Project> 

http://stylecop.codeplex.com/wikipage?title=Running%20StyleCop%20in%20VS2005%20or%20VS%20Express&referringTitle=Documentation

您還可以設置何時運行規則的條件。如果條件評估爲false StyleCop不會運行。我們使用條件抑制了StyleCop時運行單元測試

<Project> 
    <Import Project="..\Packages\StyleCop.MSBuild.4.7.17.1\tools\StyleCop.targets" Condition="'$(NCrunch)'!='1'" /> 
</Project> 

爲了配置了StyleCop規則,你將需要安裝StyleCop_v4.7.17.0.msi。我們只爲整個代碼庫定義一個Settings.StyleCop文件(父設置文件)。

http://stylecop.codeplex.com/wikipage?title=Sharing%20StyleCop%20Settings%20Across%20Projects&referringTitle=Documentation

+0

它會爲一個文件中的所有類生成一個合併日誌嗎? MsBuildExtensionpackage允許你這樣做。 http://www.msbuildextensionpack.com/ – RockWorld

+0

我們正在使用CruiseControl,默認情況下它只是將構建的輸出添加到主日誌中,並將其包含在主構建報告中。所以我們看到所有的StyleCop警告就像我們會看到的和編譯錯誤。我沒有考慮在自己的StyleCop格式的報告中顯示警告(如果這是你要求的),因爲我們沒有必要爲這一步驟。 – MoMo

相關問題