Dosyaları derlemeden çıkarma

Proje dosyasında, tüm dosyaları bir dizine veya iç içe yerleştirilmiş dizin kümesine derleme girişi olarak eklemek için joker karakterler kullanabilirsiniz. Ancak, dizinde bir dosya veya iç içe dizin kümesinde bir dizin olabilir ve derleme için giriş olarak eklemek istemezsiniz. Bu dosyayı veya dizini giriş listesinden açıkça dışlayabilirsiniz. Bir projede yalnızca belirli koşullar altında eklemek istediğiniz bir dosya da olabilir. Bir dosyanın derlemeye dahil olduğu koşulları açıkça bildirebilirsiniz.

Not

Bu makalede açıklanan teknikler F# ve C++ için geçerli değildir. Bu proje sistemleri kaynak dosyaları kendileri yönetir.

Visual Studio kullanarak dosyayı dışlama

Visual Studio kullanıyorsanız, Çözüm Gezgini dosyasını seçin, Özellikler penceresini görüntüleyin (Alt+Enter tuşuna basın) ve Derleme Eylemi'ni Yok olarak ayarlayın.

Bu, MSBuild proje dosyasında aşağıdaki değişikliklere neden olur:

  <ItemGroup>
    <Compile Remove="ClassToExclude.cs" />
  </ItemGroup>

  <ItemGroup>
    <None Include="ClassToExclude.cs" />
  </ItemGroup>

Bu, birkaç dosya için iyi çalışır, ancak belirli bir desenle eşleşen daha fazla sayıda dosyaya veya dosyaya ölçeği artırmaz. .NET projelerinde, msbuild kullanarak dosyaları ve dizinleri glob olarak da adlandırılan bir joker karakter ifadesi kullanarak dışlayabilirsiniz.

.NET projelerindeki dosyaları veya dizinleri dışlama

Öğe listeleri bir derlemenin giriş dosyalarıdır. .NET SDK projeleri gibi çoğu projede, standart içeri aktarmalar tarafından önceden tanımlanmış olan farklı öğe türlerinde (örneğin, Compile kaynak dosyalar, Content belirli statik dosyalar vb.) önceden tanımlanmış öğe listeleri vardır. Bu öğelerin listesi Common MSBuild proje öğeleri bölümünde bulunabilir. Proje kodunuzda, bunlar ilgili her şeyi içerecek şekilde önceden tanımlanmıştır; örneğin, Compile bir C# projesinde uzantıya .cs sahip tüm dosyaları içerir.

Dosyaları dışlamak için öğedeki özniteliğini Remove kullanabilirsiniz.

<ItemGroup>
   <Compile Remove="ClassToExclude.cs" />
</ItemGroup>

Birden çok ayrı dosya veya çeşitli glob desenleri belirtebilirsiniz:

<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>

Desteklenen desenlerin listesi için bkz . Desen biçimleri.

MSBuild diline dosya veya dizin ekleme ve dışlama

Ham MSBuild dilinde (yani standart içeri aktarmalardan veya bir SDK'ya başvuru olmadan), eklemek istediğiniz öğeler ayrı olarak veya özniteliği kullanılarak Include bir grup olarak bildirilir. Örneğin:

<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>

Bir dizindeki veya iç içe dizin kümesindeki tüm dosyaları bir derlemenin girdileri olarak eklemek için joker karakterler kullanıyorsanız, dizinde bir veya daha fazla dosya veya eklemek istemediğiniz iç içe yerleştirilmiş dizin kümesinde bir dizin olabilir. Öğeyi öğe listesinden dışlamak için özniteliğini Exclude kullanın.

Exclude aslında bir öğe işlemi değildir; kendi başına kullanılamaz, ancak yalnızca için Includedeğiştirici olarak kullanılır.

Hariç tüm .cs dosyaları veya *.vb dosyaları dahil etmek için Form2

  • Aşağıdakilerden Include ve Exclude özniteliklerinden birini kullanın:

    <CSFile Include="*.cs" Exclude="Form2.cs"/>
    

    veya

    <VBFile Include="*.vb" Exclude="Form2.vb"/>
    

ve dışındaki Form2 tüm .cs dosyaları veya .vb dosyaları dahil etmek içinForm3

  • Aşağıdakilerden Include ve Exclude özniteliklerinden birini kullanın:

    <CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
    

    veya

    <VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
    

Dizindekiler dışındaki tüm .jpg dosyaları dizinin alt dizinlerine Images dahil Version2 etmek için

  • Aşağıdaki Include ve Exclude özniteliklerini kullanın:

    <JPGFile
        Include="Images\**\*.jpg"
        Exclude = "Images\**\Version2\*.jpg"/>
    

    Not

    Her iki öznitelik için de yolu belirtmeniz gerekir. Özniteliğinde Include dosya konumlarını belirtmek için mutlak bir yol kullanırsanız, özniteliğinde Exclude mutlak bir yol da kullanmanız gerekir; öznitelikte Include göreli yol kullanıyorsanız, öznitelikte Exclude göreli bir yol da kullanmanız gerekir.

Dışla ve Kaldır

Kendi öğe listelerinizi tanımlıyorsanız mümkün olduğunca kullanmanız Exclude gerekir. dışlanacak öğelerin işlenmesi gerekmediğinden, ile aynı bildirimde Includekullanmanın Exclude bir performans avantajı vardır.

ve Contentgibi Compile standart öğe listeleri gibi önceden tanımlanmış bir öğe listenize sahip olduğunuzda kullanınRemove. Bu durumda desteklenmez Exclude .

Not

Bunu destekleyen bir SDK kullanıyorsanız özelliğini olarak ayarlayabilir $(OverrideDefaultCompileItems) ve isteğe bağlı olarak Excludeve ile Include kendi Compile öğenizi tanımlayabilirsiniz.true

Bir derlemenin girişlerinden dosya veya dizin dışlamak için koşulları kullanma

Örneğin, Bir Hata Ayıklama derlemesine dahil etmek istediğiniz ancak Yayın derlemesine dahil etmek istemediğiniz öğeler varsa, öğenin dahil edileceği koşulları belirtmek için özniteliğini kullanabilirsiniz Condition .

Dosya Formula.vb yalnızca Sürüm derlemelerine dahil etmek için

  • Aşağıdakine benzer bir Condition öznitelik kullanın:

    <Compile
        Include="Formula.vb"
        Condition=" '$(Configuration)' == 'Release' " />
    

Örnek

Aşağıdaki kod örneği, Form2.cs dışında dizindeki tüm .cs dosyalarıyla bir proje oluşturur.

<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>