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 Include
değiştirici olarak kullanılır.
Hariç tüm .cs
dosyaları veya *.vb
dosyaları dahil etmek için Form2
Aşağıdakilerden
Include
veExclude
ö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
veExclude
ö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
veExclude
ö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ğindeExclude
mutlak bir yol da kullanmanız gerekir; öznitelikteInclude
göreli yol kullanıyorsanız, öznitelikteExclude
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 Include
kullanmanın Exclude
bir performans avantajı vardır.
ve Content
gibi 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 Exclude
ve 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>