Mengecualikan file dari build
Dalam file proyek, Anda dapat menggunakan kartubebas untuk menyertakan semua file dalam satu direktori atau sekumpulan direktori berlapis sebagai input untuk build. Namun, mungkin ada satu file di direktori atau satu direktori dalam sekumpulan direktori berlapis yang tidak ingin Anda sertakan sebagai input untuk build. Anda dapat secara eksplisit mengecualikan file atau direktori tersebut dari daftar input. Mungkin juga ada file dalam proyek yang hanya ingin Anda sertakan dalam kondisi tertentu. Anda dapat secara eksplisit menyatakan kondisi di mana file disertakan dalam build.
Catatan
Teknik yang dijelaskan dalam artikel ini tidak berlaku untuk F# dan C++. Sistem proyek tersebut mengelola file sumber itu sendiri.
Mengecualikan file menggunakan Visual Studio
Jika Anda menggunakan Visual Studio, pilih file di Penjelajah Solusi, lihat jendela Properti (tekan Alt+Enter), dan atur Tindakan Build ke Tidak Ada.
Itu menghasilkan perubahan berikut dalam file proyek MSBuild:
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
<ItemGroup>
<None Include="ClassToExclude.cs" />
</ItemGroup>
Itu berfungsi dengan baik untuk beberapa file, tetapi tidak meningkatkan hingga jumlah file atau file yang lebih besar yang cocok dengan pola tertentu. Dalam proyek .NET, Anda dapat menggunakan MSBuild untuk mengecualikan file dan direktori menggunakan ekspresi kartubebas, juga disebut glob, seperti yang dijelaskan berikutnya.
Mengecualikan file atau direktori dalam proyek .NET
Daftar item adalah file input untuk build. Untuk sebagian besar proyek, seperti proyek .NET SDK, ada daftar item yang telah ditentukan sebelumnya dari berbagai jenis item (misalnya, Compile
untuk file sumber, Content
untuk file statis tertentu, dan sebagainya) yang sudah ditentukan oleh impor standar. Daftar item ini dapat ditemukan di item proyek Common MSBuild. Dalam kode proyek Anda, ini telah ditentukan sebelumnya untuk menyertakan semuanya yang relevan; misalnya, Compile
dalam proyek C# menyertakan semua file dengan .cs
ekstensi.
Untuk mengecualikan file, Anda dapat menggunakan Remove
atribut pada item.
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
Anda dapat menentukan beberapa file individual, atau berbagai pola glob:
<ItemGroup>
<Compile Remove="Contoso*.cs" /> <!-- Wildcard on filename -->
<Compile Remove="File1.cs;File2.cs" /> <!-- List of files with separator -->
<Compile Remove="Contoso/**/*.cs" /> <!-- All .cs files in a directory subtree -->
</ItemGroup>
Untuk daftar pola yang didukung, lihat Format pola.
Sertakan dan kecualikan file atau direktori dalam bahasa MSBuild
Dalam bahasa MSBuild mentah (yaitu, tanpa impor standar atau referensi ke SDK), item yang ingin Anda sertakan dinyatakan secara terpisah atau sebagai grup menggunakan Include
atribut . Contohnya:
<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>
Jika Anda menggunakan kartubebas untuk menyertakan semua file dalam satu direktori atau sekumpulan direktori berlapis sebagai input untuk build, mungkin ada satu atau beberapa file di direktori atau satu direktori dalam kumpulan direktori berlapis yang tidak ingin Anda sertakan. Untuk mengecualikan item dari daftar item, gunakan Exclude
atribut.
Exclude
sebenarnya bukan operasi item; itu tidak dapat digunakan dengan sendirinya, tetapi hanya sebagai pengubah untuk Include
.
Untuk menyertakan semua .cs
atau *.vb
file kecuali Form2
Gunakan salah satu atribut dan
Include
berikut iniExclude
:<CSFile Include="*.cs" Exclude="Form2.cs"/>
or
<VBFile Include="*.vb" Exclude="Form2.vb"/>
Untuk menyertakan semua .cs
atau .vb
file kecuali Form2
dan Form3
Gunakan salah satu atribut dan
Include
berikut iniExclude
:<CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
or
<VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
Untuk menyertakan semua .jpg
file dalam subdirektori Images
direktori kecuali yang ada Version2
di direktori
Gunakan salah satu atribut dan
Include
berikut iniExclude
:<JPGFile Include="Images\**\*.jpg" Exclude = "Images\**\Version2\*.jpg"/>
Catatan
Anda harus menentukan jalur untuk kedua atribut. Jika Anda menggunakan jalur absolut untuk menentukan lokasi file dalam
Include
atribut, Anda juga harus menggunakan jalur absolut dalamExclude
atribut; jika Anda menggunakan jalur relatif dalamInclude
atribut, Anda juga harus menggunakan jalur relatif diExclude
atribut.
Kecualikan dan Hapus
Jika Anda menentukan daftar item Anda sendiri, Anda harus menggunakan Exclude
jika memungkinkan. Ada manfaat performa untuk digunakan Exclude
dalam deklarasi yang sama dengan Include
, karena item yang akan dikecualikan tidak harus diproses.
Gunakan Remove
saat Anda memiliki daftar item yang telah ditentukan sebelumnya, seperti dalam kasus daftar item standar seperti Compile
dan Content
. Dalam hal ini, Exclude
tidak didukung.
Catatan
Jika Anda menggunakan SDK yang mendukungnya, Anda dapat mengatur $(OverrideDefaultCompileItems)
properti ke true
, dan menentukan item Anda sendiri Compile
dengan Include
dan, opsional, Exclude
.
Kecualikan file atau direktori dari input untuk build
Jika ada item yang ingin Anda sertakan, misalnya, dalam build Debug tetapi bukan build Rilis, Anda dapat menggunakan Condition
atribut untuk menentukan kondisi untuk menyertakan item.
Untuk menyertakan file Formula.vb hanya dalam build Rilis
Gunakan
Condition
atribut yang mirip dengan yang berikut ini:<Compile Include="Formula.vb" Condition=" '$(Configuration)' == 'Release' " />
Contoh
Contoh kode berikut membangun proyek dengan semua file .cs di direktori kecuali Form2.cs.
<Project DefaultTargets="Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<builtdir>built</builtdir>
</PropertyGroup>
<ItemGroup>
<CSFile Include="*.cs" Exclude="Form2.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