2013-04-08 20 views
12

我創建一個MSBuild文件的,我需要我的生成服務器上做進一步事一些任務結合起來。這個過程的一部分需要運行代碼分析。我的問題是,我已經爲多個頂級項目運行代碼分析,但它們每個都與我們的實用程序庫等其他項目具有相同的依賴關係。這意味着每次代碼分析都重複執行Utility Library的代碼分析。這裏是我的MSBuild文件:的MSBuild文件來運行代碼分析不重疊

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="4.0"> 
    <PropertyGroup> 
     <Configuration Condition=" '$(Configuration)' == '' ">Dev</Configuration> 
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 
     <RunCodeAnalysis>true</RunCodeAnalysis> 
     <CodeAnalysisTargets>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\CodeAnalysis\Microsoft.CodeAnalysis.targets</CodeAnalysisTargets> 
     <CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors> 
     <StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings> 
     <DefineConstants>TRACE;DEBUG;CODE_ANALYSIS</DefineConstants> 
     <BuildInParallel>true</BuildInParallel> 
     <WebProjectTargets>Clean;Build;Package</WebProjectTargets> 
     <OtherProjectTargets>Clean;Build</OtherProjectTargets> 
     <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies> 
    </PropertyGroup> 

    <Target Name="Build"> 
     <!-- Web Projects --> 
     <MSBuild 
      Projects="$(MSBuildProjectDirectory)\Source\WebProjects\WebApp1\WebApp1.csproj" 
      Properties=" 
       Configuration=$(Configuration); 
       PackageLocation=$(MSBuildProjectDirectory)\Packages\WebApp1.zip; 
       RunCodeAnalysis=$(RunCodeAnalysis); 
       CodeAnalysisTargets=$(CodeAnalysisTargets); 
       CodeAnalysisTreatWarningsAsErrors=$(CodeAnalysisTreatWarningsAsErrors); 
       StyleCopTreatErrorsAsWarnings=$(StyleCopTreatErrorsAsWarnings); 
       DefineConstants=$(DefineConstants); 
       BuildInParallel=$(BuildInParallel); 
       GenerateSerializationAssemblies=$(GenerateSerializationAssemblies); 
       " 
      Targets="$(WebProjectTargets)" /> 
     <MSBuild 
      Projects="$(MSBuildProjectDirectory)\Source\WebProjects\WebApp2\WebApp2.csproj" 
      Properties=" 
       Configuration=$(Configuration); 
       PackageLocation=$(MSBuildProjectDirectory)\Packages\WebApp2.zip; 
       RunCodeAnalysis=$(RunCodeAnalysis); 
       CodeAnalysisTargets=$(CodeAnalysisTargets); 
       CodeAnalysisTreatWarningsAsErrors=$(CodeAnalysisTreatWarningsAsErrors); 
       StyleCopTreatErrorsAsWarnings=$(StyleCopTreatErrorsAsWarnings); 
       DefineConstants=$(DefineConstants); 
       BuildInParallel=$(BuildInParallel); 
       GenerateSerializationAssemblies=$(GenerateSerializationAssemblies); 
       " 
      Targets="$(WebProjectTargets)" /> 
     <MSBuild 
      Projects="$(MSBuildProjectDirectory)\Source\WebProjects\Administrator\Administrator.csproj" 
      Properties=" 
       Configuration=$(Configuration); 
       PackageLocation=$(MSBuildProjectDirectory)\Packages\Administrator.zip; 
       RunCodeAnalysis=$(RunCodeAnalysis); 
       CodeAnalysisTargets=$(CodeAnalysisTargets); 
       CodeAnalysisTreatWarningsAsErrors=$(CodeAnalysisTreatWarningsAsErrors); 
       StyleCopTreatErrorsAsWarnings=$(StyleCopTreatErrorsAsWarnings); 
       DefineConstants=$(DefineConstants); 
       BuildInParallel=$(BuildInParallel); 
       GenerateSerializationAssemblies=$(GenerateSerializationAssemblies); 
       " 
      Targets="$(WebProjectTargets)" /> 
     <MSBuild 
      Projects="$(MSBuildProjectDirectory)\Source\OtherProjects\Service\Service.csproj" 
      Properties=" 
       Configuration=$(Configuration); 
       RunCodeAnalysis=$(RunCodeAnalysis); 
       CodeAnalysisTargets=$(CodeAnalysisTargets); 
       CodeAnalysisTreatWarningsAsErrors=$(CodeAnalysisTreatWarningsAsErrors); 
       StyleCopTreatErrorsAsWarnings=$(StyleCopTreatErrorsAsWarnings); 
       DefineConstants=$(DefineConstants); 
       BuildInParallel=$(BuildInParallel); 
       GenerateSerializationAssemblies=$(GenerateSerializationAssemblies); 
       " 
      Targets="$(OtherProjectTargets)" /> 
    </Target> 
</Project> 

任何想法,如何防止代碼分析在這種情況下,在同一組件上運行超過一次?

+0

你真的需要在每次進行構建時運行代碼分析?我通常在構建的二進制文件上運行它,因爲它確實會減慢構建速度,我懷疑它需要比每天更頻繁地運行。 – 2013-04-09 07:55:24

+0

我每次開發構建時都會運行代碼分析(如果代碼發生更改,每兩個小時),因爲我們希望在需要更正代碼時收到通知。如果我改變這個,我會修改我的設置,所以我有一個計劃,每小時運行一次代碼分析,一個計劃每兩個小時開發一次。 – Chris 2013-04-09 14:03:40

+4

你能和/ V運行構建:診斷和追捕這一行:'目標「RunCodeAnalysis:'它應該能顯示在未來幾行什麼樣的輸入,什麼輸出是如果你清理掉,你可能會在生成文件夾。保持'* .lastcodeanalysissucceeded'周圍鋪設,因爲他們確定目標外的日期。 – rene 2013-10-20 12:54:08

回答

1

通常情況下,我運行代碼分析的命令行工具,經過「包裝」我的二進制分發。 MSBuildCodeMetrics是用於在構建中運行度量標準的「胚胎」項目。

的想法是,如果一些用戶提交了太多的線條或太多圈複雜度的方法來打破建立,但該項目不符合這個成熟呢。

無論如何,如果你想運行通過命令行的指標,請嘗試:

http://msdn.microsoft.com/en-us/library/bb385914.aspx

當然你需要一些魔術的所有組件複製到一個臨時目錄(如您的最終方案),然後根據此目錄運行度量標準。

相關問題