您可以以編程方式使用的MSBuild API建設項目,並有SonarQube分析作爲構建的一部分執行。用於MSBuild的SonarQube掃描儀與MSBuild.exe命令行沒有緊密耦合。
ImportBefore功能在標準的Microsoft目標文件中實現。例如,看一下的%ProgramFiles(x86)的%\的MSBuild \ 14.0 \斌\ Microsoft.Common.CurrentVersion.targets其中包含以下行:
<Import Project="$(MSBuildUserExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.targets\ImportBefore\*" Condition="'$(ImportUserLocationsByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildUserExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.targets\ImportBefore')"/>
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.targets\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.targets\ImportBefore')"/>
所有這些行做的是導入任何目標存在於衆所周知的位置的文件。該機制可用於自動將目標包含到每個項目中,而無需在項目中明確包含目標文件。此機制獨立於MSBuild.exe。但是,您使用的是哪個版本的標準目標文件無關緊要:v4.0標準目標文件不包含此機制,但是v12.0和v14.0版本可以。
以編程方式觸發構建的最簡單方法是使用MSBuild v12.0或v14.0並依賴標準ImportBefore行爲。
或者,您可以執行下列操作之一:
手動編輯您的項目文件,明確列入需要SonarQube目標,或
編程方式導入所需SonarQube目標在觸發構建之前使用MSBuild API(通過向添加「Import」類型的「Item」,包括參數指向要導入的目標文件的位置)。用於MSBuild的SonarQube掃描儀集成測試使用此方法。
我已經使用'Process.Start()'來調用'msbuild.exe',但你的建議似乎是有效的。儘管我沒有給它一個答案,但接受這個答案是一個答案。 – WiSeeker