Derlenecek dosyaları seçme
Çoğu projede, özel olarak derlemek istediğiniz dosyaları seçmeniz gerekmez. Örneğin, Visual Studio ile oluşturulan tüm projelerde projedeki tüm kaynak dosyalar oluşturulur. Ancak, proje klasörleri dışındaki diğer konumlardan dosya oluşturmak istediğinizde veya .NET SDK gibi bir SDK kullanmak yerine kendi derleme işleminizi oluştururken olduğu gibi varsayılandan farklı senaryoları işlemek için proje dosyanızı nasıl düzenleyebileceğinizi bilmeniz gerekebilir.
Proje türüne göre varsayılan davranış
MSBuild'in derlemede hangi dosyaları içerdiğini belirleyen varsayılan davranış, proje türüne göre farklılık gösterir.
.NET SDK projeleri için standart .NET SDK'sı, proje klasör ağacında uygun dile özgü dosya uzantısıyla eşleşen dosyaları içeren varsayılan Compile
bir öğe listesi tanımlar. Örneğin, bir C# projesi için öğe, Compile
proje klasöründeki tüm kaynak dosyaları ve tüm alt klasörleri özyinelemeli olarak eşleşen glob deseni **/*.cs
ile doldurulur. Öğesini proje dosyasında görmezsiniz Compile
, çünkü örtük olarak içeri aktarılan SDK .props
dosyasında tanımlanır. Bkz . .NET proje SDK'sı genel bakış - varsayılan ekleme ve dışlamalar.
Visual Studio kullanıyorsanız, bir dosyada Derleme Eylemi'ni değiştirerek kaynak dosya kümesinin oluşturulmasını değiştirebilirsiniz. Bir dosyayı derlemenin dışında tutmak için None
olarak ayarlayın. Bunu Visual Studio'da yapmak proje dosyasını etkiler. Kaynak dosyayı öğe listesinden kaldırmak ve öğe listesine eklemek için satırların Compile
None
eklendiğini göreceksiniz.
<ItemGroup>
<Compile Remove="Class.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Class.cs" />
</ItemGroup>
.NET Framework veya SDK olmayan diğer projeler için, Compile
öğe tüm kaynak dosyalar listelenerek açıkça proje dosyasında oluşturulur.
C++ projeleri için kaynak dosyalar proje dosyasındaki ClCompile
öğesine açıkça eklenir.
SDK kullanmadan bir MSBuild proje dosyasını el ile yazdığınızda, her kaynak dosyayı proje dosyasında ayrı olarak listeleyebilir veya joker karakterleri kullanarak tüm dosyaları bir dizine veya iç içe dizin kümesine ekleyebilirsiniz. Bu makaledeki Compile
teknikleri kullanarak C++ projelerindeki öğe listesini (.NET projelerinde) veya ClCompile
öğe listesini değiştirerek hangi dosyaların derlenmiş olduğunu özelleştirebilirsiniz.
Girişleri belirtme
Öğeler bir derlemenin girişlerini (örneğin kaynak dosyaları) temsil eder. Öğeler hakkında daha fazla bilgi için bkz . Öğeler.
Derlemeye yönelik dosyaları eklemek için bunların bir öğe listesine eklenmesi gerekir. Daha önce açıklandığı gibi, .NET SDK ve .NET Framework projelerinde kaynak dosyaların öğe listesi şeklindedir Compile
. Örtük içeri aktarmalarda tanımlandığı için öğe listesini .NET SDK projelerinde görmezsiniz Compile
. Bkz. Proje SDK'larını kullanma.
Standart içeri aktarmaları kullanmayan proje dosyaları veya CSFile
gibi VBFile
rastgele bir öğe listesi adı kullanabilir. Bu makalenin devamında yer alan Örnek 1 ve Örnek 2'ye bakın. Öğe listesini temel alan bir derleme ayarlamak için, bu makalenin devamında açıklandığı gibi bunu bir derleme görevine ada göre geçirirsiniz.
Dosyaları tek tek dahil ederek veya aynı anda çok sayıda dosya eklemek için joker karakterler kullanılarak öğe listelerine birden çok dosya eklenebilir.
Öğeleri tek tek bildirmek için
Aşağıdakine
Include
benzer öznitelikleri kullanın:<Compile Include="Form1.cs"/>
veya
<Compile Include="Form1.vb"/>
Not
Öğe koleksiyonundaki öğeler proje dosyasıyla aynı dizinde değilse, öğenin tam veya göreli yolunu belirtmeniz gerekir. Örneğin:
Include="..\..\Form2.cs"
.
Aynı öğe listesi birden çok Include
öznitelik tarafından tekrar tekrar değiştirilebilir. Her Include
bir, daha önce orada olanı ekler.
Birden çok öğeyi bildirmek için
Aşağıdakine
Include
benzer öznitelikleri kullanın:<Compile Include="Form1.cs;Form2.cs"/>
veya
<Compile Include="Form1.vb;Form2.vb"/>
Joker karakterler içeren girişleri belirtme
Ayrıca joker karakterleri kullanarak tüm dosyaları veya yalnızca alt dizinlerdeki belirli dosyaları bir derlemenin girdileri olarak yinelemeli olarak ekleyebilirsiniz. Joker karakterler hakkında daha fazla bilgi için bkz . Öğeler
Aşağıdaki örnekler, proje dosyası Project dizininde bulunan aşağıdaki dizinlerde ve alt dizinlerde grafik dosyaları içeren bir projeyi temel alır:
Project\Images\BestJpgs
Project\Images\ImgJpgs
Project\Images\ImgJpgs\Img1
Images dizinine ve alt dizinlerine tüm .jpg dosyalarını dahil etmek için
Aşağıdaki
Include
özniteliği kullanın:Include="Images\**\*.jpg"
img ile başlayan tüm .jpg dosyalarını dahil etmek için
Aşağıdaki
Include
özniteliği kullanın:Include="Images\**\img*.jpg"
Tüm dosyaları jpgs ile biten adlarla dizinlere eklemek için
Aşağıdaki
Include
özniteliklerden birini kullanın:Include="Images\**\*jpgs\*.*"
veya
Include="Images\**\*jpgs\*"
Öğeleri dışlama ve kaldırma
Bazı özel durumlar dışında belirli bir desenle eşleşen dosyaları belirtmek isteyebilirsiniz. Bunu ve Exclude
birleşimiyle Include
tek bir işlemde yapabilirsiniz.
<ItemGroup>
<!-- Include every C# source file, except anything in the "sub" folder -->
<Compile Include="**/*.cs" Exclude="sub/**/*.cs">
</ItemGroup>
Daha önce eklenmiş veya SDK tarafından varsayılan olarak eklenmiş bir öğeyi kaldırmak için özniteliğini Remove
kullanabilirsiniz.
<ItemGroup>
<!-- Remove anything in the "sub" folder -->
<Compile Remove="sub/**/*.cs">
</ItemGroup>
Öğeleri göreve veya hedefe geçirme
Çoğu proje dosyasında, bu işlem standart içeri aktarmalar tarafından işlendiğinden Compile
, öğeyi açıkça bir hedefe veya göreve geçirmeniz gerekmez. Ancak proje dosyasının hedef olması durumunda, bir derlemenin girişi olarak öğe listesinin @()
tamamını belirtmek için görevlerdeki gösterimi kullanabilirsiniz. Tüm dosyaları ayrı ayrı listeleyip listelemediğiniz veya joker karakterler kullandığınız için bu gösterimi kullanabilirsiniz.
Tüm C# veya Visual Basic dosyalarını bir derleyici görevine giriş olarak kullanmak için
Aşağıdakine
Include
benzer öznitelikleri kullanın:<CSC Sources="@(CSFile)">...</CSC>
veya
<VBC Sources="@(VBFile)">...</VBC>
Not
Derlemenin girişlerini belirtmek için öğelerle joker karakterler kullanmanız gerekir; Csc veya Vbc gibi MSBuild görevlerinde özniteliğini Sources
kullanarak girişleri belirtemezsiniz. Aşağıdaki örnek bir proje dosyasında geçerli değildir:
<CSC Sources="*.cs">...</CSC>
Örnek 1
Aşağıdaki kod örneği, tüm giriş dosyalarını ayrı olarak içeren bir projeyi gösterir.
<Project DefaultTargets="Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<Builtdir>built</Builtdir>
</PropertyGroup>
<ItemGroup>
<CSFile Include="Form1.cs"/>
<CSFile Include="AssemblyInfo.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>
Örnek 2
Aşağıdaki kod örneği, tüm .cs dosyalarını eklemek için joker karakter kullanır.
<Project DefaultTargets="Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<builtdir>built</builtdir>
</PropertyGroup>
<ItemGroup>
<CSFile Include="*.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>