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動作に依存することです。
または、次のいずれかを実行できます。
プロジェクト ファイルを手動で編集して、必要なSonarQubeターゲットを明示的に含めるか、または
ビルドをトリガーする前に、 MSBuild API を使用して必要なSonarQubeターゲットをプログラムでインポートします (インポートするターゲット ファイルの場所を指すincludeパラメーターを使用して "Import" タイプの "Item" を追加することにより)。MSBuild統合テスト用のSonarQube スキャナーは、このアプローチを使用します。