MSBuild は、ソリューション ファイルをビルドするときに、最初にファイルを内部的にプロジェクト ファイルに変換してから、そのプロジェクト ファイルをビルドします。 生成されたプロジェクト ファイルは、before.< をインポートできますsolutionname>.sln.targets ファイルは、ターゲットを定義する前に、after.< をインポートしますターゲットをインポートした後の solutionname>.sln.targets。
ターゲットの前後のファイルは、$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportBefore
および$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportAfter
ディレクトリにインストールされます。
そのため、たとえば、次の名前のファイルを作成して、ビルド後にカスタム ログ メッセージ MyCustomizedSolution.sln 書き込むための新しいターゲットを定義できます 。同 じディレクトリ内の MyCustomizedSolution.sln.targets。
<Project>
<Target Name="EmitCustomMessage" AfterTargets="Build">
<Message Importance="High" Text="The solution has completed the Build target" />
</Target>
</Project>
ソリューション ビルドはプロジェクト ビルドとは別であるため、これらの設定はプロジェクト ビルドには影響しません。
重要
この方法でソリューション ビルドをカスタマイズすると、 MSBuild.exe
または dotnet build
を使用したコマンド ライン ビルドにのみ適用され、Visual Studio 内のビルドには適用されません。 そのため、ソリューション レベルでカスタマイズを行わないのが最善です。 ソリューション内のすべてのプロジェクトをカスタマイズする代わりに、ソリューション フォルダー内の Directory.Build.props ファイルと Directory.Build.targets ファイルを使用することをお勧めします。
通常、 $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile
フォルダーに書き込むには、昇格されたアクセス許可が必要です。 同じように拡張するソリューション ファイルが多数あるが、 SolutionFile フォルダーに書き込みたくない場合は、 Directory.Solution.props ファイルと Directory.Solution.targets ファイルを作成し、拡張するソリューション ファイルの上のルート パスに配置できます。
Directory.Solution.props はソリューション ビルドの開始時にインポートされ、Directory.Solution.targets はソリューション ビルドの最後にインポートされます。
ソリューション ファイルをビルドする場合、 Directory.Build.props と Directory.Build.targets はインポートされないため、代わりに Directory.Solution.props と Directory.Solution.targets を使用する必要があります。 2 種類のファイルは、相互に暗黙的にインポートされません。
ルート フォルダーに Directory.Solution.props または Directory.Solution.targets ファイルがあるが、そのフォルダーの下のソリューションでこれらのファイルをインポートしたくない場合は、ソリューションの before.<solutionname>.sln.targets ファイルを使用して、プロパティの ImportDirectorySolutionProps
と ImportDirectorySolutionTargets
を false
に設定します。
または、 $(DirectorySolutionPropsPath)
プロパティと $(DirectorySolutionTargetsPath)
プロパティを使用して、それらのファイルの別の場所を指定することもできます。 この方法は、ソリューションのサブセットで共通の特定のプロパティ値またはターゲットが必要な場合に役立ちます。
注
ソリューション ビルドは、MSBuild 17.12 以降の .slnx
ソリューション ファイル形式でサポートされています。
before.< の両方solutionname>.slnx.targets および before.<solutionname>.sln.targets、および対応する after ファイルは、MSBuild 17.14 以降で動作します。
ビルドのカスタマイズ オプションの詳細については、「 ビルドのカスタマイズ」を参照してください。