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 **/*.cs
globu, 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 Compile
seznam 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>