Sdílet prostřednictvím


Výběr souborů pro sestavení

Ve většině projektů nemusíte konkrétně vybírat soubory, které se mají sestavit. Například každý projekt vytvořený pomocí sady Visual Studio sestaví všechny zdrojové soubory v projektu. Možná ale budete muset vědět, jak upravit soubor projektu tak, aby zpracovával scénáře, které se liší od výchozího nastavení, například když chcete sestavit soubory z jiných umístění mimo složky projektu nebo když vytváříte vlastní proces sestavení místo sady SDK, jako je sada .NET SDK.

Výchozí chování podle typu projektu

Výchozí chování, které určuje, které soubory MSBuild obsahuje v sestavení, se liší podle typu projektu.

Pro projekty sady .NET SDK standardní sada .NET SDK definuje výchozí Compile seznam položek, který obsahuje soubory ve stromu složek projektu, které odpovídají příslušné příponě souboru specifického pro jazyk. Například pro projekt Compile jazyka C# se položka naplní vzorem **/*.csglobu, který odpovídá všem zdrojovým souborům ve složce projektu a všem jeho podsložkách rekurzivně. Prvek v souboru projektu nevidíte Compile , protože je definován v souboru sady SDK .props , který je importován implicitně. Viz přehled sady .NET Project SDK – výchozí zahrnutí a vyloučení.

Pokud používáte Visual Studio, můžete upravit sadu zdrojových souborů tak, aby se sestavily, a to změnou akce sestavení v souboru. Nastavte ho tak, aby None se ze sestavení vyloučil soubor. Tímto způsobem v sadě Visual Studio ovlivní soubor projektu. Uvidíte, že řádky byly přidány k odebrání zdrojového Compile souboru ze seznamu položek a jeho přidání do None seznamu položek.

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

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

Pro .NET Framework nebo jiné projekty, které nejsou sdk, Compile je položka vytvořena explicitně v souboru projektu výpisem všech zdrojových souborů.

U projektů C++ jsou zdrojové soubory explicitně přidány do ClCompile elementu v souboru projektu.

Když ručně vytvoříte soubor projektu MSBuild bez použití sady SDK, můžete vypsat každý zdrojový soubor samostatně v souboru projektu nebo můžete použít zástupné dokumentace k zahrnutí všech souborů v jednom adresáři nebo vnořené sadě adresářů. Pomocí technik v tomto článku můžete také upravit Compile seznam položek (v projektech .NET) nebo ClCompile seznam položek v projektech C++ a přizpůsobit tak, které soubory jsou vytvořené.

Zadání vstupů

Položky představují vstupy (například zdrojové soubory) pro sestavení. Další informace o položkách najdete v tématu Položky.

Pokud chcete zahrnout soubory pro sestavení, musí být zahrnuté v seznamu položek. Jak je popsáno dříve, v projektech .NET SDK a .NET Framework je Compileseznam položek zdrojových souborů . Seznam položek se nezobrazuje Compile v projektech sady .NET SDK, protože je definovaný v implicitních importech. Viz Použití sad SDK projektu.

Soubory projektu, které nespoléhá na standardní importy, můžou používat libovolný název seznamu položek, například VBFile nebo CSFile. Podívejte se na příklad 1 a příklad 2 dále v tomto článku. Pokud chcete vytvořit build založený na seznamu položek, předáte ho názvu úloze sestavení, jak je popsáno dále v tomto článku.

Do seznamů položek lze přidat více souborů tak, že do seznamů položek zahrnete soubory jednotlivě nebo pomocí zástupných znaků, které budou obsahovat mnoho souborů najednou.

Deklarace položek jednotlivě

  • Include Použijte atributy podobné následujícímu:

    <Compile Include="Form1.cs"/>

    or

    <Compile Include="Form1.vb"/>

    Poznámka:

    Pokud položky v kolekci položek nejsou ve stejném adresáři jako soubor projektu, je nutné zadat úplnou nebo relativní cestu k položce. Například: Include="..\..\Form2.cs".

Stejný seznam položek lze opakovaně upravovat více Include atributy. Každý Include přidá to, co tam bylo dříve.

Deklarace více položek

  • Include Použijte atributy podobné následujícímu:

    <Compile Include="Form1.cs;Form2.cs"/>

    nebo

    <Compile Include="Form1.vb;Form2.vb"/>

Zadání vstupů pomocí zástupných znaků

Zástupné zóny můžete použít také k rekurzivnímu zahrnutí všech souborů nebo pouze konkrétních souborů z podadresářů jako vstupů sestavení. Další informace o zástupných

Následující příklady jsou založené na projektu, který obsahuje grafické soubory v následujících adresářích a podadresářích s projektovým souborem umístěným v adresáři Projektu :

Project\Images\BestJpgs

Project\Images\ImgJpgs

Project\Images\ImgJpgs\Img1

Zahrnutí všech .jpg souborů v adresáři a podadresářích Images

  • Použijte následující Include atribut:

    Include="Images\**\*.jpg"

Zahrnutí všech souborů .jpg počínaje img

  • Použijte následující Include atribut:

    Include="Images\**\img*.jpg"

Zahrnutí všech souborů do adresářů s názvy končícími na jpgs

  • Použijte jeden z následujících Include atributů:

    Include="Images\**\*jpgs\*.*"

    nebo

    Include="Images\**\*jpgs\*"

Vyloučení a odebrání položek

Je možné, že budete chtít určit soubory, které odpovídají určitému vzoru, s některými výjimkami. Můžete to udělat v jedné operaci s kombinací Include a Exclude.

<ItemGroup>
  <!-- Include every C# source file, except anything in the "sub" folder -->
  <Compile Include="**/*.cs" Exclude="sub/**/*.cs">
</ItemGroup>

Pokud chcete odebrat položku, která byla dříve zahrnuta nebo byla ve výchozím nastavení součástí sady SDK, můžete použít Remove atribut.

<ItemGroup>
  <!-- Remove anything in the "sub" folder -->
  <Compile Remove="sub/**/*.cs">
</ItemGroup>

Předání položek úkolu nebo cíli

Ve většině souborů projektu nemusíte položku explicitně předávat Compile cíli nebo úkolu, protože to zpracovává standardní importy. V případě cílového souboru projektu ale můžete pomocí @() zápisu v úkolech zadat jako vstup pro sestavení celý seznam položek. Tento zápis můžete použít bez ohledu na to, jestli vypíšete všechny soubory samostatně, nebo použijete zástupné znamény.

Použití všech souborů jazyka C# nebo Visual Basic jako vstupů pro úlohu kompilátoru

  • Include Použijte atributy podobné následujícímu:

    <CSC Sources="@(CSFile)">...</CSC>

    or

    <VBC Sources="@(VBFile)">...</VBC>

Poznámka:

K zadání vstupů pro sestavení je nutné použít zástupné zóny s položkami; Nelze zadat vstupy pomocí atributu Sources v úlohách MSBuild, jako je Csc nebo Vbc. Následující příklad není platný v souboru projektu:

<CSC Sources="*.cs">...</CSC>

Příklad 1

Následující příklad kódu ukazuje projekt, který obsahuje všechny vstupní soubory samostatně.

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

Příklad 2

Následující příklad kódu používá zástupný znak k zahrnutí všech .cs souborů.

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