首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SonarQube MSBuild运行程序是否与Microsoft.Build API一起工作?

SonarQube MSBuild运行程序是否与Microsoft.Build API一起工作?
EN

Stack Overflow用户
提问于 2015-12-21 07:08:57
回答 3查看 194关注 0票数 1

我可以编程地调用MsBuild.SonarQube.Runner begin (直接调用引用的程序集)、Microsoft.Build.BuildManager.BuildMsBuild.SonarQube.Runner end。但是,问题是Runner end报告没有找到ProjectInfo.xml文件。可能的原因:您指定了无效的生成配置,或者自定义的MSBuild分析目标没有导入.

MsBuild.SonarQube.Runner是否与MSBuild.exe命令行工具紧密耦合?我不清楚跑步者是如何获得构建事件的细节的。

我想要达到的目标有可能吗?

我必须补充说,runner begin和build正在取得成功。bin\Debug文件夹中填充了生成的二进制文件。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-11 09:42:00

您可以使用MSBuild API以编程方式构建项目,并将SonarQube分析作为构建的一部分执行。用于SonarQube的MSBuild扫描程序没有紧密耦合到MSBuild.exe命令行。

ImportBefore功能是在标准微软目标文件中实现的。例如,查看%ProgramFiles(x86)%\MSBuild\14.0\Bin\Microsoft.Common.CurrentVersion.targets,它包含以下行:

代码语言:javascript
复制
  <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行为。

或者,您可以执行以下操作之一:

  1. 手动编辑项目文件以显式包含所需的SonarQube目标,或
  2. 在触发构建之前,以编程方式使用SonarQube API导入所需的MSBuild目标(通过添加“导入”类型的“项”,并将MSBuild参数指向要导入的目标文件的位置)。用于SonarQube集成测试的MSBuild扫描程序使用这种方法。
票数 0
EN

Stack Overflow用户

发布于 2015-12-22 08:27:58

SonarQube Scanner for MSBuild是一个开放源码项目,因此您可以亲自了解到在引擎盖下一切如何工作:https://github.com/SonarSource/sonar-msbuild-runner

我不认为它与MSBuild.exe命令行紧密耦合,但是它依赖于MSBuild的ImportsBefore机制,并且只适用于特定的MSBuild版本(目前为12和14 )。

您的问题是某个问题的解决方案的实现,但是您没有说明这个初始问题是什么。这就很难给出一个好的答案。

票数 0
EN

Stack Overflow用户

发布于 2015-12-22 18:15:05

由于MSBuild SonarQube的运行程序依赖于MSBuild的ImportsBefore特性,而且由于Microsoft.Build API在ImportsBefore上没有可比性,因此至少到目前为止,还没有办法将SonarQube与ImportsBefore结合使用。它必须通过进程调用与MsBuild.exe一起使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34390510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档