Aracılığıyla paylaş


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ılanCompile 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 **/*.csile 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 CompileNone 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 CSFilegibi 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 Excludebirleş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>