Panduan: Membuat file proyek MSBuild dari awal
Bahasa pemrograman yang menargetkan .NET Framework menggunakan file proyek MSBuild untuk menjelaskan dan mengontrol proses build aplikasi. Saat Anda menggunakan Visual Studio untuk membuat file proyek MSBuild, XML yang sesuai ditambahkan ke file secara otomatis. Namun, Anda mungkin perlu untuk memahami cara XML diatur dan bagaimana Anda dapat mengubahnya untuk mengontrol build.
Catatan
Artikel ini sesuai jika Anda ingin mempelajari dasar-dasar cara kerja MSBuild secara independen dari SDK apa pun. Membangun dengan SDK, seperti saat Anda menggunakan dotnet build
atau Anda menambahkan Sdk
atribut ke elemen proyek akar, tidak tercakup dalam artikel ini. Lihat .NET Project SDK.
Untuk informasi tentang membuat file proyek untuk proyek C++, lihat MSBuild (C++).
Panduan ini menunjukkan cara membuat file proyek dasar secara bertahap, dengan hanya menggunakan editor teks. Panduan ini mengikuti langkah-langkah berikut:
Memperbarui variabel lingkungan PATH.
Buat file sumber aplikasi minimal.
Buat file proyek MSBuild minimal.
Buat aplikasi menggunakan file proyek.
Tambahkan properti untuk mengontrol build.
Kontrol build dengan mengubah nilai properti.
Tambahkan target ke build.
Kontrol build dengan menentukan target.
Membangun secara bertahap.
Panduan ini menunjukkan cara membangun proyek di perintah dan memeriksa hasilnya. Untuk informasi selengkapnya tentang MSBuild dan cara menjalankan MSBuild di prompt perintah, lihat Panduan: Menggunakan MSBuild.
Untuk menyelesaikan panduan, Anda harus menginstal Visual Studio karena menyertakan pengkompilasi MSBuild dan C#, yang diperlukan untuk panduan.
Perluas jalur
Sebelum dapat menggunakan MSBuild, Anda harus memperluas variabel lingkungan PATH untuk menyertakan semua alat yang diperlukan. Anda dapat menggunakan Perintah Pengembang untuk Visual Studio. Cari di Windows 10 di kotak pencarian di bilah tugas Windows. Untuk menyiapkan lingkungan dalam prompt perintah biasa atau di lingkungan pembuatan skrip, jalankan VSDevCmd.bat di subfolder Common7/Tools dari penginstalan Visual Studio.
Membuat aplikasi minimal
Bagian ini menunjukkan cara membuat file sumber aplikasi C# minimal menggunakan editor teks.
Pada prompt perintah, telusuri ke folder tempat Anda ingin membuat aplikasi, misalnya, \My Documents\ atau \Desktop\.
Buat subfolder bernama \HelloWorld\ dan ubah direktori untuk masuk ke dalamnya.
Di editor teks, buat file baru HelloWorld.cs lalu salin dan tempel kode berikut:
using System; class HelloWorld { static void Main() { #if DebugConfig Console.WriteLine("WE ARE IN THE DEBUG CONFIGURATION"); #endif Console.WriteLine("Hello, world!"); } }
Bangun aplikasi dengan mengetik csc helloworld.cs di prompt perintah.
Bangun aplikasi dengan mengetik csc helloworld.cs di prompt perintah.
Pesan Halo, dunia! harus ditampilkan.
Hapus executable.
Membuat file proyek MSBuild minimal
Sekarang setelah Anda memiliki file sumber aplikasi minimal, Anda dapat membuat file proyek minimal untuk membangun aplikasi. File proyek ini berisi elemen-elemen berikut:
Node root
Project
yang diperlukan.Node
ItemGroup
yang berisi elemen item.Elemen item yang merujuk ke file sumber aplikasi.
Node
Target
untuk berisi tugas yang diperlukan untuk membangun aplikasi.Elemen
Task
untuk memulai pengkompilasi C# untuk membangun aplikasi.
Untuk membuat file proyek MSBuild minimal
Di editor teks, buat file baru HelloWorld.csproj dan masukkan kode berikut:
<Project> <ItemGroup> <Compile Include="helloworld.cs" /> </ItemGroup> </Project>
Ini
ItemGroup
berisi elemenCompile
item dan menentukan satu file sumber sebagai item.Tambahkan node
Target
sebagai elemen turunan dari nodeProject
. Beri nama nodeBuild
.<Target Name="Build"> </Target>
Sisipkan elemen tugas ini sebagai elemen turunan dari node
Target
:<Csc Sources="@(Compile)"/>
Simpan file proyek ini dan beri nama Helloworld.csproj.
File proyek minimal Anda harus menyerupai kode berikut:
<Project>
<ItemGroup>
<Compile Include="helloworld.cs"/>
</ItemGroup>
<Target Name="Build">
<Csc Sources="@(Compile)"/>
</Target>
</Project>
Tugas dalam target Build dijalankan secara berurutan. Dalam hal ini, tugas pengkompilasi Csc
C# adalah satu-satunya tugas. Ini mengharapkan daftar file sumber untuk dikompilasi, dan ini diberikan oleh nilai item Compile
. Item Compile
hanya mereferensikan satu file sumber, Helloworld.cs.
Catatan
Dalam elemen item, Anda dapat menggunakan karakter wildcard tanda bintang (*) untuk mereferensikan semua file yang memiliki ekstensi nama file .cs, sebagai berikut:
<Compile Include="*.cs" />
Membangun aplikasi
Sekarang, untuk membangun aplikasi, gunakan file proyek yang baru saja Anda buat.
Pada perintah, ketik msbuild helloworld.csproj -t:Build.
Ini membangun target Build file proyek Helloworld dengan memanggil pengkompilasi C# untuk membuat aplikasi Helloworld.
Uji aplikasi dengan mengetik helloworld.
Pesan Halo, dunia! harus ditampilkan.
Catatan
Anda dapat melihat detail selengkapnya tentang build dengan meningkatkan tingkat verbositas. Untuk mengatur tingkat verbositas ke "terperinci", ketik perintah ini di prompt perintah:
msbuild helloworld.csproj -t:Build -verbosity:detailed
Menambahkan properti build
Anda dapat menambahkan properti build ke file proyek untuk mengontrol build lebih lanjut. Sekarang tambahkan properti ini:
Properti
AssemblyName
untuk menentukan nama aplikasi.Properti
OutputPath
untuk menentukan folder untuk memuat aplikasi.
Untuk menambahkan properti build
Hapus aplikasi yang ada yang dapat dieksekusi (nanti, Anda akan menambahkan
Clean
target untuk menangani penghapusan file output lama).Dalam file proyek, sisipkan elemen
PropertyGroup
ini tepat setelah elemen pembukaProject
:<PropertyGroup> <AssemblyName>MSBuildSample</AssemblyName> <OutputPath>Bin\</OutputPath> </PropertyGroup>
Tambahkan tugas ini ke target Build, tepat sebelum tugas
Csc
:<MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
Tugas
MakeDir
membuat folder yang dinamai menurut propertiOutputPath
, asalkan tidak ada folder dengan nama tersebut yang saat ini ada.Tambahkan atribut ini
OutputAssembly
ke tugasCsc
:<Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
Ini menginstruksikan pengkompilasi C# untuk menghasilkan rakitan yang dinamai
AssemblyName
oleh properti dan memasukkannya ke dalam folder yang dinamaiOutputPath
oleh properti .Simpan perubahan.
File proyek Anda sekarang akan menyerupai kode berikut:
<Project>
<PropertyGroup>
<AssemblyName>MSBuildSample</AssemblyName>
<OutputPath>Bin\</OutputPath>
</PropertyGroup>
<ItemGroup>
<Compile Include="helloworld.cs" />
</ItemGroup>
<Target Name="Build">
<MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
<Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
</Target>
</Project>
Catatan
Kami menyarankan agar Anda menambahkan pemisah jalur garis miring terbelakang (\) di akhir nama folder saat Anda menentukannya di elemen OutputPath
, alih-alih menambahkannya dalam atribut OutputAssembly
tugas Csc
. Karena itu,
<OutputPath>Bin\</OutputPath>
OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
lebih baik dari
<OutputPath>Bin</OutputPath>
OutputAssembly="$(OutputPath)\$(AssemblyName).exe" />
Menguji properti build
Sekarang Anda dapat membangun aplikasi menggunakan file proyek tempat Anda menggunakan properti build untuk menentukan folder output dan nama aplikasi.
Pada perintah, ketik msbuild helloworld.csproj -t:Build.
Ini membuat folder \Bin\ dan kemudian memanggil pengkompilasi C# untuk membuat aplikasi MSBuildSample dan meletakkannya di folder \Bin\ .
Untuk memverifikasi bahwa folder \Bin\ telah dibuat, dan bahwa folder tersebut berisi aplikasi MSBuildSample, ketik dir Bin.
Uji aplikasi dengan mengetik Bin\MSBuildSample untuk menjalankan executable.
Pesan Halo, dunia! harus ditampilkan.
Menambahkan target build
Selanjutnya, tambahkan dua target lagi ke file proyek, sebagai berikut:
Target Bersihkan yang menghapus file lama.
Target Pembangunan ulang yang menggunakan atribut
DependsOnTargets
untuk memaksa tugas Bersih dijalankan sebelum tugas Build.
Sekarang setelah Anda memiliki beberapa target, Anda dapat menetapkan target Build sebagai target default.
Untuk menambahkan target build
Dalam file proyek, tambahkan dua target ini tepat setelah target Build:
<Target Name="Clean" > <Delete Files="$(OutputPath)$(AssemblyName).exe" /> </Target> <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
Target Clean memanggil tugas Delete untuk menghapus aplikasi. Target Rebuild tidak berjalan sampai target Clean dan target Build telah berjalan. Meskipun target Rebuild tidak memiliki tugas, target Clean berjalan sebelum target Build.
Tambahkan atribut ini
DefaultTargets
ke elemen pembukaProject
:<Project DefaultTargets="Build">
Hal ini menetapkan target Build sebagai target default.
File proyek Anda sekarang akan menyerupai kode berikut:
<Project DefaultTargets="Build">
<PropertyGroup>
<AssemblyName>MSBuildSample</AssemblyName>
<OutputPath>Bin\</OutputPath>
</PropertyGroup>
<ItemGroup>
<Compile Include="helloworld.cs" />
</ItemGroup>
<Target Name="Build">
<MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
<Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
</Target>
<Target Name="Clean" >
<Delete Files="$(OutputPath)$(AssemblyName).exe" />
</Target>
<Target Name="Rebuild" DependsOnTargets="Clean;Build" />
</Project>
Menguji target build
Anda dapat menjalankan target build baru untuk menguji fitur file proyek ini:
Membangun build default.
Mengatur nama aplikasi pada perintah.
Menghapus aplikasi sebelum aplikasi lain dibuat.
Menghapus aplikasi tanpa membangun aplikasi lain.
Untuk menguji target build
Pada perintah, ketik msbuild helloworld.csproj -p:AssemblyName=Greetings.
Karena Anda tidak menggunakan sakelar -t untuk secara eksplisit mengatur target, MSBuild menjalankan target Build default. Sakelar -p mengambil alih properti
AssemblyName
dan memberinya nilai baru,Greetings
. Ini menyebabkan aplikasi baru, Greetings.exe, dibuat di folder \Bin\.Untuk memverifikasi bahwa folder \Bin\ berisi aplikasi MSBuildSample dan aplikasi Greetings baru, ketik dir Bin.
Uji aplikasi Salam (misalnya, dengan mengetik Bin\Greetings di Windows).
Pesan Halo, dunia! harus ditampilkan.
Hapus aplikasi MSBuildSample dengan mengetik msbuild helloworld.csproj -t:clean.
Ini menjalankan tugas Bersihkan untuk menghapus aplikasi yang memiliki nilai properti default
AssemblyName
,MSBuildSample
.Hapus aplikasi Greetings dengan mengetik msbuild helloworld.csproj -t:clean -p:AssemblyName=Greetings.
Ini menjalankan tugas Bersihkan untuk menghapus aplikasi yang memiliki nilai properti AssemblyName yang diberikan,
Greetings
.Untuk memverifikasi bahwa folder \Bin\ sekarang kosong, ketik dir Bin.
Ketik msbuild.
Meskipun file proyek tidak ditentukan, MSBuild membangun file helloworld.csproj karena hanya ada satu file proyek di folder saat ini. Hal ini menyebabkan aplikasi MSBuildSample dibuat di folder \Bin\.
Untuk memverifikasi bahwa folder \Bin\ berisi aplikasi MSBuildSample, ketik dir Bin.
Membangun secara bertahap
Anda dapat memberi tahu MSBuild untuk membuat target hanya jika file sumber atau file target yang bergantung pada target telah berubah. MSBuild menggunakan stempel waktu file untuk menentukan apakah file telah berubah.
Untuk membangun secara bertahap
Dalam file proyek, tambahkan atribut ini ke target Build yang terbuka:
Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe"
Ini menentukan bahwa target Build bergantung pada file input yang ditentukan dalam grup item
Compile
, dan bahwa target output adalah file aplikasi.Target Build yang dihasilkan harus menyerupai kode berikut:
<Target Name="Build" Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe"> <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" /> <Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" /> </Target>
Uji target Build dengan mengetik msbuild -v:d di perintah.
Ingatlah bahwa helloworld.csproj adalah file proyek default, dan bahwa Build adalah target default.
Sakelar -v:d adalah singkatan dari -verbosity:detail yang Anda gunakan sebelumnya.
Jika Anda sudah membuat output, baris ini harus ditampilkan:
Melompati target "Build" karena semua file output sudah diperbarui sehubungan dengan file input.
MSBuild melompati target Build karena tidak ada file sumber yang berubah sejak aplikasi terakhir dibuat.
C# contoh
Contoh berikut menunjukkan file proyek yang mengompilasi aplikasi C# dan mencatat pesan yang berisi nama file output.
Kode
<Project DefaultTargets = "Compile">
<!-- Set the application name as a property -->
<PropertyGroup>
<appname>HelloWorldCS</appname>
</PropertyGroup>
<!-- Specify the inputs by type and file name -->
<ItemGroup>
<CSFile Include = "*.cs"/>
</ItemGroup>
<Target Name="Compile">
<!-- Run the C# compilation using input files of type CSFile -->
<CSC
Sources = "@(CSFile)"
OutputAssembly = "$(appname).exe">
<!-- Set the OutputAssembly attribute of the CSC task
to the name of the executable file that is created -->
<Output
TaskParameter = "OutputAssembly"
ItemName = "EXEFile" />
</CSC>
<!-- Log the file name of the output file -->
<Message Text="The output file is @(EXEFile)"/>
</Target>
</Project>
Contoh Visual Basic
Contoh berikut menunjukkan file proyek yang mengompilasi aplikasi Visual Basic dan mencatat pesan yang berisi nama file output.
Kode
<Project DefaultTargets = "Compile">
<!-- Set the application name as a property -->
<PropertyGroup>
<appname>HelloWorldVB</appname>
</PropertyGroup>
<!-- Specify the inputs by type and file name -->
<ItemGroup>
<VBFile Include = "consolehwvb1.vb"/>
</ItemGroup>
<Target Name = "Compile">
<!-- Run the Visual Basic compilation using input files of type VBFile -->
<VBC
Sources = "@(VBFile)"
OutputAssembly= "$(appname).exe">
<!-- Set the OutputAssembly attribute of the VBC task
to the name of the executable file that is created -->
<Output
TaskParameter = "OutputAssembly"
ItemName = "EXEFile" />
</VBC>
<!-- Log the file name of the output file -->
<Message Text="The output file is @(EXEFile)"/>
</Target>
</Project>
Apa selanjutnya?
Visual Studio dapat secara otomatis melakukan banyak pekerjaan yang ditunjukkan dalam panduan ini. Untuk mempelajari cara menggunakan Visual Studio untuk membuat, mengedit, membangun, dan menguji file proyek MSBuild, lihat Panduan: Menggunakan MSBuild.
Konten terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk