1

プログラムで呼び出すことができますMsBuild.SonarQube.Runner begin(参照されているアセンブリを直接呼び出すことにより)、Microsoft.Build.BuildManager.BuildおよびMsBuild.SonarQube.Runner end. ただし、問題は、ProjectInfo.xml ファイルが見つからないRunner endという報告です。考えられる原因: 無効なビルド構成を指定したか、カスタム MSBuild 分析ターゲットがインポートされませんでした。

MsBuild.SonarQube.Runner は MSBuild.exe コマンドライン ツールと密接に結合されていますか? ランナーがビルドイベントの詳細をどのように正確に取得するかについては明確ではありません。

私が達成しようとしていることは可能ですか?

それを追加する必要がrunner beginあり、ビルドは成功しています。bin\Debug フォルダーには、ビルドされたバイナリが取り込まれます。

4

3 に答える 3

0

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動作に依存することです。

または、次のいずれかを実行できます。

  1. プロジェクト ファイルを手動で編集して、必要なSonarQubeターゲットを明示的に含めるか、または

  2. ビルドをトリガーする前に、 MSBuild API を使用して必要なSonarQubeターゲットをプログラムでインポートします (インポートするターゲット ファイルの場所を指すincludeパラメーターを使用して "Import" タイプの "Item" を追加することにより)。MSBuild統合テスト用のSonarQube スキャナーは、このアプローチを使用します。

于 2016-01-11T09:42:00.437 に答える