2015-12-21 128 views
1

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

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

这是甚至可能我试图实现的目标?

我必须补充说明runner begin并且构建成功。 bin \ Debug文件夹使用构建的二进制文件填充。

回答

0

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

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

  1. 手动编辑您的项目文件,明确列入需要SonarQube目标,或

  2. 编程方式导入所需SonarQube目标在触发构建之前使用MSBuild API(通过向添加“Import”类型的“Item”,包括参数指向要导入的目标文件的位置)。用于MSBuild的SonarQube扫描仪集成测试使用此方法。

+0

我已经使用'Process.Start()'来调用'msbuild.exe',但你的建议似乎是有效的。尽管我没有给它一个答案,但接受这个答案是一个答案。 – WiSeeker

0

的SonarQube扫描仪的MSBuild的是一个开源项目,所以你可以看到自己的一切引擎盖下是如何工作的:https://github.com/SonarSource/sonar-msbuild-runner

我不认为这是tighly耦合到MSBuild.exe命令行,但它取决于MSBuild的机制,只适用于特定的MSBuild版本(当前为12和14)。

你的问题是关于某个问题的解决方案的实现,但是你没有说出这个最初的问题是什么。这使得很难给出一个好的答案。

+0

'ImportsBefore'是MSBuild.exe的特定功能,由于MSBuild的SonarQube扫描仪依赖于它,所以间接扫描程序变得特定于MSBuild。这意味着我不能使用'Microsoft.Build' API。我打算将MSBuild.exe作为外部进程调用。希望工程。 – WiSeeker

0

由于的MSBuild转轮SonarQube要看的MSBuild ImportsBefore特点,因为Microsoft.Build API没有可比性ImportsBefore,至少截至目前没有办法与API一起使用声纳转轮的MSBuild。它必须通过过程调用与MsBuild.exe一起使用。