Sdílet prostřednictvím


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 a Exclude 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 atributu Exclude . Pokud v atributu Include použijete relativní cestu, musíte také použít relativní cestu v atributu Exclude .

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 Includepolož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ě Excludetrue.

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>