2015-12-21 81 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一起使用。

相關問題