Aracılığıyla paylaş


Dosyaları derleme işleminden çıkar

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 veya iç içe dizin kümesinde, oluşturma süreci için girdi olarak dahil etmek istemediğiniz bir dosya veya bir dizin olabilir. 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.

Uyarı

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'nde dosyayı seçin, Özellikler penceresini görüntüleyin ( Alt+Enter tuşuna basın) ve Derleme Eylemi'niYok 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 daha fazla dosya veya belirli bir desenle eşleşen dosyalar için ölçeklenmez. .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.

Tüm .cs veya .vb dosyalarını Form2 hariç tutarak dahil etmek için

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

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

    veya

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

.cs ve .vb hariç tüm Form2 veya Form3 dosyalarını dahil etmek için

  • 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"/>
    

.jpg dizininin alt dizinlerindeki ve Images dizini dışındaki tüm Version2 dosyalarını dahil etmek için

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

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

    Uyarı

    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. Exclude ve Include aynı bildirimde kullanıldığında, dışlanacak öğelerin işlenmesine gerek kalmadığından bir performans avantajı vardır.

Remove öğesine, önceden tanımlanmış bir öğe listesine sahip olduğunuzda, standart öğe listeleri olan Compile ve Content durumunda olduğu gibi başvurun. Bu durumda Exclude desteklenmez.

Uyarı

Eğer bunu destekleyen bir SDK kullanıyorsanız, $(OverrideDefaultCompileItems) özelliğini true olarak ayarlayabilir ve, isteğe bağlı olarak Compile ile birlikte, Include kullanarak kendi Exclude öğenizi tanımlayabilirsiniz.

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, öznitelik Condition'yi kullanarak öğenin dahil edileceği koşulları belirtebilirsiniz.

Yalnızca Sürüm derlemelerine dahil edilecek dosya Formula.vb

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