Menentukan peristiwa build (C#)

Gunakan peristiwa build untuk menentukan perintah yang berjalan sebelum build dimulai atau setelah build selesai.

Tentukan peristiwa build

  1. Di Penjelajah Solusi, pilih proyek yang ingin Anda tentukan peristiwa buildnya.

  2. Pada menu Proyek, klik Properti.

  3. Pilih tab Bangun Peristiwa .

  4. Dalam kotak Baris perintah peristiwa pra-build, tentukan sintaks peristiwa build.

    Catatan

    Peristiwa pra-build tidak berjalan jika proyek sudah diperbarui dan tidak ada build yang dipicu.

  5. Dalam kotak Baris perintah peristiwa pasca-build, tentukan sintaks peristiwa build.

    Catatan

    call Tambahkan pernyataan sebelum semua perintah pasca-build yang menjalankan file .bat. Misalnya, call MyFile.bat atau call MyFile.bat call MyFile2.bat. Jalur bisa absolut, atau relatif terhadap folder proyek.

  6. Dalam kotak Jalankan peristiwa pasca-build, tentukan dalam kondisi apa untuk menjalankan peristiwa pasca-build.

    Catatan

    Untuk menambahkan sintaksis panjang, atau untuk memilih makro build apa pun dari kotak dialog Baris perintah peristiwa pra-build/pasca-build, klik tombol elipsis (...) untuk menampilkan kotak edit.

  1. Di Penjelajah Solusi, pilih proyek yang ingin Anda tentukan peristiwa buildnya.

  2. Pada menu Proyek, klik Properti {ProjectName} (atau dari Penjelajah Solusi, tekan Alt+Enter).

  3. Pilih Bangun > Peristiwa.

    Cuplikan layar memperlihatkan pengaturan Peristiwa Build.

  4. Di bagian Peristiwa pra-build, tentukan sintaks peristiwa build.

    Catatan

    Peristiwa pra-build tidak berjalan jika proyek sudah diperbarui dan tidak ada build yang dipicu.

  5. Di bagian Peristiwa pasca-build, tentukan sintaks peristiwa build.

    Catatan

    call Tambahkan pernyataan sebelum semua perintah pasca-build yang menjalankan file .bat. Misalnya, call MyFile.bat atau call MyFile.bat call MyFile2.bat. Jalur bisa absolut, atau relatif terhadap folder proyek.

  6. Di bagian Kapan harus menjalankan peristiwa pasca-build, tentukan dalam kondisi apa untuk menjalankan peristiwa pasca-build.

Membuat perintah peristiwa build

Perintah peristiwa build dapat menyertakan perintah apa pun yang valid pada prompt perintah atau dalam file .bat . Nama file batch harus didahului oleh call untuk memastikan bahwa semua perintah berikutnya dijalankan. File batch itu sendiri berjalan dari folder output, misalnya, bin/Debug. Jika Anda memerlukan file batch yang sama untuk semua konfigurasi, Anda dapat meletakkannya di folder yang sama dengan file proyek dan menggunakan jalur relatif ke sana, misalnya, call ../../prebuild.bat.

Anda dapat menjalankan skrip PowerShell dengan memasukkan perintah seperti PowerShell MyPowerShellScript.ps1. Jalur ke skrip PowerShell mungkin absolut, atau mungkin relatif terhadap direktori proyek. Anda perlu memastikan bahwa kebijakan eksekusi untuk skrip PowerShell pada sistem operasi Anda diatur dengan tepat untuk menjalankan skrip. Lihat Tentang kebijakan eksekusi.

Jika Anda ingin menggunakan shell lain, seperti bash, Anda umumnya akan menggunakan sintaks perintah yang sama seperti yang akan Anda gunakan untuk meluncurkan skrip shell dari prompt perintah Windows. Menggunakan shell pihak ketiga berada di luar cakupan dokumentasi ini, tetapi situs seperti Stack Overflow mungkin berguna.

Dalam file proyek

Saat Anda melakukan langkah-langkah sebelumnya, Visual Studio memodifikasi file proyek Anda dengan menambahkan PreBuild target atau PostBuild dan kode MSBuild yang diperlukan untuk menjalankan langkah-langkah yang Anda berikan. Anda dapat membuka file proyek dan melihat langkah-langkahnya. Mengubah langkah-langkah dalam file proyek baik-baik saja. Anda akan melihat perubahan di bagian Peristiwa Build > di properti proyek setelah menyimpan perubahan.

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
  <Exec Command="call prebuild.bat" />
</Target>

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
  <Exec Command="call postbuild.bat" />
</Target>

Elemen Exec mengacu pada tugas MSBuild Exec . Lihat Tugas exec untuk informasi tentang parameter lain apa yang dapat Anda gunakan untuk menyesuaikan eksekusi. Misalnya, Anda dapat menggunakan WorkingDirectory untuk mengatur folder tempat executable dijalankan. Defaultnya adalah direktori yang berisi file proyek.

<Exec Command="call prebuild.bat" WorkingDirectory="$(OutDir)">

Anda dapat menggunakan properti MSBuild (makro), seperti OutDir dalam contoh sebelumnya, seperti yang dibahas nanti dalam artikel ini di Makro.

Kesalahan dan output lainnya

Output peristiwa build Anda ditulis ke bagian Build dari Jendela Output. Untuk membukanya, pilih Tampilkan>Jendela Lain, Jendela Output, atau tekan Ctrl+Alt+O. Di menu dropdown di samping Tampilkan output dari, pilih Bangun.

Jika peristiwa pra-build atau pasca-build Anda tidak berhasil diselesaikan, Anda dapat mengakhiri build dengan meminta tindakan peristiwa Anda keluar dengan kode selain nol (0). Kode keluar nol menunjukkan tindakan yang berhasil; kode keluar lainnya dianggap sebagai kesalahan.

Jika peristiwa pra-build gagal, Anda mungkin melihat kesalahan seperti ini di jendela Daftar Kesalahan:

MSB3073    The command "call c:\source\repos\prebuild.bat" exited with code 1.

Jika tidak ada cukup informasi di jendela Daftar Kesalahan, Anda dapat mencoba menggunakan Jendela Output untuk melihat output build lengkap, termasuk output apa pun dari file batch.

Tip

Jendela Daftar Kesalahan hanya terbatas pada satu baris output, baris pertama yang Anda masukkan untuk peristiwa tersebut. Jika output jendela Daftar Kesalahan penting bagi Anda, maka hindari menempatkan lebih dari satu baris dalam peristiwa. Buat file batch dari prompt perintah Windows atau di sistem operasi, lalu cukup gunakan call mybatchfile.bat untuk peristiwa tersebut. Sertakan perintah dalam file batch itu sendiri.

Untuk panduan tentang perintah yang dapat Anda gunakan dalam file batch, lihat perintah Windows.

Makro

"Makro" yang umum tersedia (sebenarnya properti MSBuild) tercantum di properti umum MSBuild. Untuk proyek .NET SDK (.NET Core atau .NET 5 dan yang lebih baru), properti tambahan tercantum di properti MSBuild untuk Microsoft.NET.Sdk.

Dalam skrip untuk peristiwa build, Anda mungkin ingin mereferensikan nilai beberapa variabel tingkat proyek seperti nama proyek atau lokasi folder output. Di versi Visual Studio sebelumnya, ini disebut makro. Yang setara dengan makro dalam versi Terbaru Visual Studio adalah properti MSBuild. MSBuild adalah mesin build yang digunakan Visual Studio untuk memproses file proyek Anda saat melakukan build. Peristiwa build dalam IDE menghasilkan target MSBuild dalam file proyek. Anda dapat menggunakan properti MSBuild apa pun yang tersedia di target dalam file proyek Anda (misalnya, $(OutDir) atau $(Configuration)) . Properti MSBuild yang tersedia untuk Anda dalam peristiwa ini bergantung pada file yang diimpor secara implisit atau eksplisit dalam file proyek, file dan .targets properti yang .props diatur dalam file proyek Anda, seperti dalam PropertyGroup elemen. Berhati-hatilah untuk menggunakan ejaan yang tepat dari setiap properti. Tidak ada kesalahan yang dilaporkan jika Anda salah mengeja properti; sebagai gantinya, properti yang tidak terdefinisi mengevaluasi ke string kosong.

Misalnya, Anda menentukan peristiwa pra-build sebagai berikut:

Cuplikan layar memperlihatkan contoh peristiwa pra-build.

Peristiwa pra-build tersebut menghasilkan entri berikut, yang Target disebut dalam file proyek Anda:

  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="echo Configuration: $(Configuration)&#xD;&#xA;echo DevEnvDir: $(DevEnvDir)&#xD;&#xA;echo OutDir: $(OutDir)&#xD;&#xA;echo ProjectDir: $(ProjectDir)&#xD;&#xA;echo VisualStudioVersion: $(VisualStudioVersion)&#xD;&#xA;echo AssemblySearchPaths: $(AssemblySearchPaths)&#xD;&#xA;echo AssemblyName: $(AssemblyName)&#xD;&#xA;echo BaseIntermediateOutputPath: $(BaseIntermediateOutputPath)&#xD;&#xA;echo CscToolPath: $(CscToolPath)" />
  </Target>

Peristiwa build muncul sebagai target yang menyertakan tugas Exec dengan input yang Anda tentukan sebagai Command. Baris baru dikodekan dalam XML.

Saat Anda membangun proyek dalam contoh ini, peristiwa pra-build mencetak nilai beberapa properti. Dalam contoh ini, $(CscToolPath) tidak menghasilkan output apa pun, karena tidak ditentukan. Ini adalah properti opsional yang dapat Anda tentukan dalam file proyek Anda untuk memberikan jalur ke instans pengompilasi C# yang disesuaikan (misalnya, jika Anda menguji versi csc.exe yang berbeda, atau pengompilasi eksperimental).

Output dari peristiwa build Anda ditulis ke output build, yang dapat ditemukan di jendela Output . Di menu dropdown Tampilkan output dari , pilih Bangun.

Build started...
1>------ Build started: Project: ConsoleApp4, Configuration: Debug Any CPU ------
1>You are using a preview version of .NET. See: https://aka.ms/dotnet-core-preview
1>Configuration: Debug
1>DevEnvDir: C:\Program Files\Microsoft Visual Studio\2022\Preview\Common7\IDE\
1>OutDir: bin\Debug\net6.0\
1>ProjectDir: C:\source\repos\ConsoleApp4\ConsoleApp4\
1>VisualStudioVersion: 17.0
1>ALToolsPath:
1>AssemblySearchPaths: {CandidateAssemblyFiles};{HintPathFromItem};{TargetFrameworkDirectory};{RawFileName}
1>AssemblyName: ConsoleApp4
1>BaseIntermediateOutputPath: obj\
1>CscToolsPath:
1>Skipping analyzers to speed up the build. You can execute 'Build' or 'Rebuild' command to run analyzers.
1>ConsoleApp4 -> C:\source\repos\ConsoleApp4\ConsoleApp4\bin\Debug\net6.0\ConsoleApp4.dll

Catatan

Beberapa skenario memerlukan tindakan build yang lebih kompleks daripada yang mampu dilakukan oleh peristiwa build. Misalnya, untuk banyak skenario pembuatan kode umum, Anda perlu menangani operasi yang bersih dan dibangun kembali, dan Anda mungkin ingin mengaktifkan build inkremental untuk langkah-langkah pembuatan kode, sehingga langkah hanya berjalan jika output sudah kedaluarsa sehubungan dengan input. MSBuild dirancang untuk menangani semua skenario tersebut secara cerdas. Pertimbangkan untuk membuat target kustom yang menentukan AfterTargets atau BeforeTargets dijalankan selama titik tertentu dalam proses build, dan untuk kontrol lebih lanjut dalam skenario lanjutan, pertimbangkan untuk membuat tugas kustom, atau tinjau berbagai cara untuk Menyesuaikan build Anda.

Contoh

  1. Buat file batch bernama postbuild.bat di folder proyek, dengan konten berikut:

    echo Copying output file %1 to %1.copy
    copy %1 %1.copy
    

    Ingat bahwa dalam file batch, %1 mengacu pada argumen pertama yang diteruskan.

  2. Panggil file batch di bagian Peristiwa pasca-build dari properti proyek, dan teruskan argumen menggunakan properti $(TargetPath)MSBuild .

    call postbuild.bat $(TargetPath)
    
  3. Buat proyek Anda dan periksa folder output. Anda akan melihat file yang disalin di samping rakitan bawaan. Di Jendela Output, di bagian Build, Anda akan melihat output file batch:

    1>Output file is C:\source\repos\ConsoleApp-BuildEvents\ConsoleApp-BuildEvents\bin\Debug\net6.0\ConsoleApp-BuildEvents.dll
    1>        1 file(s) copied.
    ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
    ========== Build started at 12:00 PM and took 00.723 seconds ==========