您可以使用MSBuild API以编程方式构建项目,并将SonarQube分析作为构建的一部分执行。MSBuild的SonarQube 扫描仪与MSBuild.exe命令行不紧密耦合。
ImportBefore功能在标准 Microsoft 目标文件中实现。例如,查看%ProgramFiles(x86)%\MSBuild\14.0\Bin\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目标,或
在触发构建之前,使用MSBuild API 以编程方式导入所需的SonarQube目标(通过添加类型为“Import”的“Item”,其中包含指向要导入的目标文件的位置的参数)。用于 MSBuild集成测试的SonarQube 扫描仪使用这种方法。