您可以以编程方式使用的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