我可以编程地调用MsBuild.SonarQube.Runner begin (直接调用引用的程序集)、Microsoft.Build.BuildManager.Build和MsBuild.SonarQube.Runner end。但是,问题是Runner end报告没有找到ProjectInfo.xml文件。可能的原因:您指定了无效的生成配置,或者自定义的MSBuild分析目标没有导入.。
MsBuild.SonarQube.Runner是否与MSBuild.exe命令行工具紧密耦合?我不清楚跑步者是如何获得构建事件的细节的。
我想要达到的目标有可能吗?
我必须补充说,runner begin和build正在取得成功。bin\Debug文件夹中填充了生成的二进制文件。
发布于 2016-01-11 09:42:00
您可以使用MSBuild API以编程方式构建项目,并将SonarQube分析作为构建的一部分执行。用于SonarQube的MSBuild扫描程序没有紧密耦合到MSBuild.exe命令行。
ImportBefore功能是在标准微软目标文件中实现的。例如,查看%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行为。
或者,您可以执行以下操作之一:
发布于 2015-12-22 08:27:58
SonarQube Scanner for MSBuild是一个开放源码项目,因此您可以亲自了解到在引擎盖下一切如何工作:https://github.com/SonarSource/sonar-msbuild-runner。
我不认为它与MSBuild.exe命令行紧密耦合,但是它依赖于MSBuild的ImportsBefore机制,并且只适用于特定的MSBuild版本(目前为12和14 )。
您的问题是某个问题的解决方案的实现,但是您没有说明这个初始问题是什么。这就很难给出一个好的答案。
发布于 2015-12-22 18:15:05
由于MSBuild SonarQube的运行程序依赖于MSBuild的ImportsBefore特性,而且由于Microsoft.Build API在ImportsBefore上没有可比性,因此至少到目前为止,还没有办法将SonarQube与ImportsBefore结合使用。它必须通过进程调用与MsBuild.exe一起使用。
https://stackoverflow.com/questions/34390510
复制相似问题