Bagikan melalui


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 dalam Exclude atribut; jika Anda menggunakan jalur relatif dalam Include atribut, Anda juga harus menggunakan jalur relatif di Exclude 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 Conditionatribut 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>