Bagikan melalui


Menyesuaikan build solusi

Ketika MSBuild membangun file solusi, MSBuild terlebih dahulu menerjemahkannya secara internal ke dalam file proyek dan kemudian membangunnya. File proyek yang dihasilkan mengimpor before.{solutionname}.sln.targets sebelum menentukan target apa pun dan after.{solutionname}.sln.targets setelah mengimpor target, termasuk target yang diinstal ke direktori $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportBefore dan $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportAfter.

Misalnya, Anda dapat menentukan target baru untuk menulis pesan log kustom setelah membangun MyCustomizedSolution.sln dengan membuat file di direktori yang sama bernama after.MyCustomizedSolution.sln.targets yang berisi

<Project>
 <Target Name="EmitCustomMessage" AfterTargets="Build">
   <Message Importance="High" Text="The solution has completed the Build target" />
 </Target>
</Project>

Build solusi terpisah dari build proyek, sehingga pengaturan di sini tidak memengaruhi build proyek.

Penting

Menyesuaikan build solusi dengan cara ini hanya berlaku untuk build baris perintah dengan MSBuild.exe. Ini tidak berlaku untuk build di dalam Visual Studio. Untuk alasan ini, tidak disarankan untuk menempatkan penyesuaian pada tingkat solusi. Alternatif yang lebih baik untuk menyesuaikan semua proyek dalam solusi adalah menggunakan file Directory.Build.props dan Directory.build.targets di folder solusi, seperti yang dibahas di bagian lain dalam artikel ini.

Jika Anda memiliki banyak file solusi yang ingin diluaskan dengan cara yang sama, tetapi tidak ingin menulis ke folder $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ (yang biasanya memerlukan izin yang lebih tinggi), Anda dapat membuat file Directory.Solution.props dan Directory.Solution.targets lalu letakkan di jalur akar di atas file solusi yang ingin Anda luaskan. Directory.Solution.props diimpor di awal pembuatan solusi, dan Directory.Solution.targets diimpor di akhir pembuatan solusi. Saat Anda membuat file solusi, Directory.Build.props dan Directory.Build.targets tidak diimpor, jadi Anda harus menggunakan Directory.Solution.props dan Directory.Solution.targets sebagai gantinya. File tidak mengimpor satu sama lain secara implisit.

Jika Anda memiliki Directory.Solution.props atau Directory.Solution.targets di folder akar, tetapi Anda memiliki solusi di bawah folder yang tidak ingin Anda impor, Anda dapat menggunakan file khusus solusi yang disebutkan sebelumnya before.{solutionname}.sln.targets dan after.{solutionname}.sln.targets untuk mengatur properti $(ImportDirectorySolutionProps) dan $(ImportDirectorySolutionTargets) ke false. Atau, Anda dapat menggunakan properti $(DirectorySolutionPropsPath) dan $(DirectorySolutionTargetsPath) untuk menentukan lokasi berbeda untuk file tersebut. Ini dapat membantu jika Anda memiliki berbagai subset dari solusi Anda yang memerlukan nilai properti tertentu atau target yang sama dengan subset tersebut.