Pilih file yang akan dibuat
Di sebagian besar proyek, Anda tidak perlu secara khusus memilih file yang akan dibuat. Misalnya, proyek apa pun yang dibuat dengan Visual Studio membangun semua file sumber dalam proyek. Namun, Anda mungkin perlu tahu cara mengedit file proyek untuk menangani skenario yang berbeda dari default, seperti ketika Anda ingin membangun file dari lokasi lain di luar folder proyek, atau saat Anda membuat proses build Anda sendiri alih-alih menggunakan SDK seperti .NET SDK.
Perilaku default menurut jenis proyek
Perilaku default yang menentukan file apa yang disertakan MSBuild dalam build berbeda menurut jenis proyek.
Untuk proyek .NET SDK, .NET SDK standar menentukan daftar item defaultCompile
yang berisi file di pohon folder proyek yang cocok dengan ekstensi file khusus bahasa yang sesuai. Misalnya, untuk proyek C#, Compile
item diisi dengan pola **/*.cs
glob , yang cocok dengan semua file sumber di folder proyek dan semua subfoldernya secara rekursif. Anda tidak melihat Compile
elemen dalam file proyek, karena didefinisikan dalam file SDK .props
yang diimpor secara implisit. Lihat Gambaran umum SDK proyek .NET - default menyertakan dan mengecualikan.
Jika menggunakan Visual Studio, Anda dapat memodifikasi kumpulan file sumber untuk dibuat dengan mengubah Tindakan Build pada file. Atur ke None
untuk mengecualikan file dari build. Melakukan ini di Visual Studio memengaruhi file proyek. Anda akan melihat bahwa baris ditambahkan untuk menghapus file sumber dari Compile
daftar item dan menambahkannya ke None
daftar item.
<ItemGroup>
<Compile Remove="Class.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Class.cs" />
</ItemGroup>
Untuk .NET Framework atau proyek non-SDK lainnya, Compile
item dibuat secara eksplisit dalam file proyek dengan mencantumkan semua file sumber.
Untuk proyek C++, file sumber secara eksplisit ditambahkan ke ClCompile
elemen dalam file proyek.
Saat Anda membuat file proyek MSBuild dengan tangan tanpa menggunakan SDK, Anda dapat mencantumkan setiap file sumber secara terpisah dalam file proyek, atau Anda dapat menggunakan kartubebas untuk menyertakan semua file dalam satu direktori atau sekumpulan direktori berlapis. Anda juga dapat menggunakan teknik dalam artikel ini untuk mengubah Compile
daftar item (dalam proyek .NET) atau ClCompile
daftar item dalam proyek C++ untuk menyesuaikan file apa yang dibuat.
Tentukan input
Item mewakili input (seperti file sumber) untuk build. Untuk informasi selengkapnya tentang item, lihat Item.
Untuk menyertakan file untuk build, file harus disertakan dalam daftar item. Seperti yang dibahas sebelumnya, dalam proyek .NET SDK dan .NET Framework, daftar item untuk file sumber adalah Compile
. Anda tidak melihat Compile
daftar item dalam proyek .NET SDK, karena ditentukan dalam impor impor implisit. Lihat Menggunakan SDK proyek.
File proyek yang tidak bergantung pada impor standar dapat menggunakan nama daftar item arbitrer, seperti VBFile
atau CSFile
. Lihat Contoh 1 dan Contoh 2 nanti di artikel ini. Untuk menyiapkan build berdasarkan daftar item, Anda meneruskan ini menurut nama ke tugas build, seperti yang dibahas nanti di artikel ini.
Beberapa file dapat ditambahkan ke daftar item dengan menyertakan file satu per satu atau menggunakan kartubebas untuk menyertakan banyak file sekaligus.
Untuk mendeklarasikan item satu per satu
Gunakan atribut
Include
yang mirip dengan hal berikut ini:<Compile Include="Form1.cs"/>
or
<Compile Include="Form1.vb"/>
Catatan
Jika item dalam koleksi item tidak berada dalam direktori yang sama dengan file proyek, Anda harus menentukan jalur lengkap atau relatif ke item. Misalnya:
Include="..\..\Form2.cs"
.
Daftar item yang sama dapat dimodifikasi berulang kali oleh beberapa Include
atribut. Masing-masing Include
menambahkan ke apa yang ada sebelumnya.
Untuk mendeklarasikan beberapa item
Gunakan atribut
Include
yang mirip dengan hal berikut ini:<Compile Include="Form1.cs;Form2.cs"/>
or
<Compile Include="Form1.vb;Form2.vb"/>
Tentukan input dengan kartubebas
Anda juga dapat menggunakan kartubebas untuk menyertakan semua file secara rekursif atau hanya file tertentu dari subdirektori sebagai input untuk build. Untuk informasi selengkapnya tentang kartubebas, lihat Item
Contoh berikut didasarkan pada proyek yang berisi file grafis di direktori dan subdirektori berikut, dengan file proyek yang terletak di direktori Proyek:
Project\Images\BestJpgs
Project\Images\ImgJpgs
Project\Images\ImgJpgs\Img1
Untuk menyertakan semua file .jpg dalam direktori dan subdirektori Gambar
Gunakan atribut berikut
Include
:Include="Images\**\*.jpg"
Untuk menyertakan semua file .jpg yang dimulai dengan img
Gunakan atribut berikut
Include
:Include="Images\**\img*.jpg"
Untuk menyertakan semua file dalam direktori dengan nama yang berakhiran jpg
Gunakan salah satu atribut
Include
berikut:Include="Images\**\*jpgs\*.*"
or
Include="Images\**\*jpgs\*"
Mengecualikan dan menghapus item
Anda mungkin ingin menentukan file yang cocok dengan pola tertentu, dengan beberapa pengecualian. Anda dapat melakukannya dalam satu operasi dengan kombinasi Include
dan Exclude
.
<ItemGroup>
<!-- Include every C# source file, except anything in the "sub" folder -->
<Compile Include="**/*.cs" Exclude="sub/**/*.cs">
</ItemGroup>
Untuk menghapus item yang sebelumnya disertakan, atau disertakan secara default oleh SDK, Anda dapat menggunakan atribut .Remove
<ItemGroup>
<!-- Remove anything in the "sub" folder -->
<Compile Remove="sub/**/*.cs">
</ItemGroup>
Meneruskan item ke tugas atau target
Di sebagian besar file proyek, Anda tidak perlu secara eksplisit meneruskan Compile
item ke target atau tugas, karena ini ditangani oleh impor standar. Tetapi dalam kasus target file proyek, Anda dapat menggunakan @()
notasi dalam tugas untuk menentukan seluruh daftar item sebagai input untuk build. Anda dapat menggunakan notasi ini apakah Anda mencantumkan semua file secara terpisah atau menggunakan wildcard.
Untuk menggunakan semua file C# atau Visual Basic sebagai input ke tugas pengkompilasi
Gunakan atribut
Include
yang mirip dengan hal berikut ini:<CSC Sources="@(CSFile)">...</CSC>
or
<VBC Sources="@(VBFile)">...</VBC>
Catatan
Anda harus menggunakan kartubebas dengan item untuk menentukan input untuk build; Anda tidak dapat menentukan input menggunakan atribut Sources
dalam tugas MSBuild seperti Csc atau Vbc. Contoh berikut tidak valid dalam file proyek:
<CSC Sources="*.cs">...</CSC>
Contoh 1
Contoh kode berikut menunjukkan proyek yang menyertakan semua file input secara terpisah.
<Project DefaultTargets="Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<Builtdir>built</Builtdir>
</PropertyGroup>
<ItemGroup>
<CSFile Include="Form1.cs"/>
<CSFile Include="AssemblyInfo.cs"/>
<Reference Include="System.dll"/>
<Reference Include="System.Data.dll"/>
<Reference Include="System.Drawing.dll"/>
<Reference Include="System.Windows.Forms.dll"/>
<Reference Include="System.XML.dll"/>
</ItemGroup>
<Target Name="PreBuild">
<Exec Command="if not exist $(builtdir) md $(builtdir)"/>
</Target>
<Target Name="Compile" DependsOnTargets="PreBuild">
<Csc Sources="@(CSFile)"
References="@(Reference)"
OutputAssembly="$(builtdir)\$(MSBuildProjectName).exe"
TargetType="exe" />
</Target>
</Project>
Contoh 2
Contoh kode berikut menggunakan kartubebas untuk menyertakan semua file .cs.
<Project DefaultTargets="Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<builtdir>built</builtdir>
</PropertyGroup>
<ItemGroup>
<CSFile Include="*.cs"/>
<Reference Include="System.dll"/>
<Reference Include="System.Data.dll"/>
<Reference Include="System.Drawing.dll"/>
<Reference Include="System.Windows.Forms.dll"/>
<Reference Include="System.XML.dll"/>
</ItemGroup>
<Target Name="PreBuild">
<Exec Command="if not exist $(builtdir) md $(builtdir)"/>
</Target>
<Target Name="Compile" DependsOnTargets="PreBuild">
<Csc Sources="@(CSFile)"
References="@(Reference)"
OutputAssembly="$(builtdir)\$(MSBuildProjectName).exe"
TargetType="exe" />
</Target>
</Project>
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