Vyloučení souborů ze sestavení
V souboru projektu můžete pomocí zástupných znaků zahrnout všechny soubory v jednom adresáři nebo vnořenou sadu adresářů jako vstupy pro sestavení. V adresáři nebo jednom adresáři však může existovat jeden soubor v vnořené sadě adresářů, které nechcete zahrnout jako vstup pro sestavení. Tento soubor nebo adresář můžete explicitně vyloučit ze seznamu vstupů. V projektu může být také soubor, který chcete zahrnout pouze za určitých podmínek. Podmínky, za kterých je soubor součástí sestavení, můžete explicitně deklarovat.
Poznámka:
Techniky popsané v tomto článku se nevztahují na jazyk F# a C++. Tyto systémy projektů spravují zdrojové soubory samy.
Vyloučení souboru pomocí sady Visual Studio
Pokud používáte Sadu Visual Studio, vyberte soubor v Průzkumník řešení, zobrazte okno Vlastnosti (stiskněte Klávesu Alt+Enter) a nastavte akci sestavení na Hodnotu Žádné.
Výsledkem jsou následující změny v souboru projektu MSBuild:
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
<ItemGroup>
<None Include="ClassToExclude.cs" />
</ItemGroup>
To funguje dobře u několika souborů, ale ne vertikálně navyšuje kapacitu na větší počet souborů nebo souborů, které odpovídají určitému vzoru. Vprojektechch
Vyloučení souborů nebo adresářů v projektech .NET
Seznamy položek jsou vstupní soubory sestavení. U většiny projektů, jako jsou projekty sady .NET SDK, jsou předdefinované seznamy položek různých typů položek (například Compile
pro zdrojové soubory, Content
pro určité statické soubory atd.), které jsou již definovány standardními importy. Seznam těchto položek najdete v běžných položkách projektu NÁSTROJE MSBuild. V kódu projektu jsou předdefinované tak, aby zahrnovaly vše, co je relevantní; Například Compile
v projektu C# zahrnuje všechny soubory s příponou .cs
.
Pokud chcete vyloučit soubory, můžete u položky použít Remove
atribut.
<ItemGroup>
<Compile Remove="ClassToExclude.cs" />
</ItemGroup>
Můžete zadat více jednotlivých souborů nebo různé vzory globu:
<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>
Seznam podporovaných vzorů najdete v tématu Formáty vzorů.
Zahrnutí a vyloučení souborů nebo adresářů v jazyce MSBuild
V nezpracovaném jazyce MSBuild (tj. bez standardních importů nebo odkazů na sadu SDK) jsou položky, které chcete zahrnout, deklarovány samostatně nebo jako skupina používající Include
atribut. Příklad:
<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>
Pokud k zahrnutí všech souborů v jednom adresáři nebo vnořené sady adresářů používáte zástupné zóny jako vstupy pro sestavení, může existovat jeden nebo více souborů v adresáři nebo jednom adresáři v vnořené sadě adresářů, které nechcete zahrnout. Chcete-li vyloučit položku ze seznamu položek, použijte Exclude
atribut.
Exclude
není ve skutečnosti operace položky; nemůže být používán sám, ale pouze jako modifikátor pro Include
.
Zahrnutí všech .cs
souborů nebo *.vb
souborů s výjimkou Form2
Použijte jeden z následujících
Include
atributůExclude
:<CSFile Include="*.cs" Exclude="Form2.cs"/>
nebo
<VBFile Include="*.vb" Exclude="Form2.vb"/>
Zahrnutí všech .cs
souborů nebo .vb
souborů s výjimkou Form2
a Form3
Použijte jeden z následujících
Include
atributůExclude
:<CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
nebo
<VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
Zahrnutí všech .jpg
souborů do podadresářů Images
adresáře s výjimkou souborů v adresáři Version2
Použijte následující
Include
aExclude
atributy:<JPGFile Include="Images\**\*.jpg" Exclude = "Images\**\Version2\*.jpg"/>
Poznámka:
Musíte zadat cestu pro oba atributy. Pokud použijete absolutní cestu k určení umístění souborů v atributu
Include
, musíte také použít absolutní cestu v atributuExclude
. Pokud v atributuInclude
použijete relativní cestu, musíte také použít relativní cestu v atributuExclude
.
Vyloučení a odebrání
Pokud definujete vlastní seznamy položek, měli byste je použít Exclude
, kdykoli je to možné. Použití stejné deklarace jako má výhodu Exclude
výkonu, protože Include
položky, které by byly vyloučeny, nemusí být zpracovány.
Použijte Remove
, pokud máte předdefinovaný seznam položek, například v případě standardních seznamů položek jako Compile
a Content
. V takovém případě Exclude
se nepodporuje.
Poznámka:
Pokud používáte sadu SDK, která ji podporuje, můžete vlastnost nastavit $(OverrideDefaultCompileItems)
na a definovat vlastní Compile
položku pomocí Include
a volitelně Exclude
true
.
Vyloučení souboru nebo adresáře ze vstupů sestavení pomocí podmínek
Pokud existují položky, které chcete zahrnout, například do sestavení Ladění, ale ne sestavení vydané verze, můžete pomocí Condition
atributu určit podmínky, za kterých se má položka zahrnout.
Zahrnutí souboru Formula.vb pouze do buildů vydaných verzí
Condition
Použijte atribut podobný následujícímu:<Compile Include="Formula.vb" Condition=" '$(Configuration)' == 'Release' " />
Příklad
Následující příklad kódu sestaví projekt se všemi .cs soubory v adresáři s výjimkou Form2.cs.
<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>