Compartilhar via


Excluir arquivos do build

Em um arquivo de projeto, você pode usar curingas para incluir todos os arquivos em um diretório ou um conjunto aninhado de diretórios como entradas para um build. No entanto, pode haver um arquivo no diretório ou um diretório em um conjunto aninhado de diretórios que você não deseja incluir como entrada para um build. Você pode excluir explicitamente esse arquivo ou diretório da lista de entradas. Também pode haver um arquivo em um projeto que você só deseja incluir em determinadas condições. Você pode declarar explicitamente as condições nas quais um arquivo é incluído em um build.

Observação

As técnicas descritas neste artigo não são aplicáveis a F# e C++. Esses sistemas de projeto gerenciam os próprios arquivos de origem.

Excluir um arquivo usando o Visual Studio

Se você estiver usando o Visual Studio, selecione o arquivo no Gerenciador de Soluções, exiba a janela Propriedades (pressione Alt+Enter) e defina a Ação de Build como Nenhuma.

Isso resulta nas seguintes alterações no arquivo de projeto do MSBuild:

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

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

Isso funciona bem para alguns arquivos, mas não se adapta bem a um número maior de arquivos ou arquivos que correspondem a um determinado padrão. Em projetos .NET, você pode usar o MSBuild para excluir arquivos e diretórios usando uma expressão curinga, também chamada de padrão 'glob', conforme descrito a seguir.

Excluir arquivos ou diretórios em projetos do .NET

Listas de itens são os arquivos de entrada para um build. Para a maioria dos projetos, como projetos do SDK do .NET, há listas de itens predefinidos de diferentes tipos de itens (por exemplo, Compile para arquivos de origem, Content para determinados arquivos estáticos e assim por diante) que já estão definidos pelas importações padrão. Uma lista desses itens pode ser encontrada em itens de projeto comuns do MSBuild. No código do projeto, elas são predefinidas para incluir tudo o que é relevante; por exemplo, Compile em um projeto C# inclui todos os arquivos com a .cs extensão.

Para excluir arquivos, você pode usar o Remove atributo no item.

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

Você pode especificar vários arquivos individuais ou vários padrões glob:

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

Para obter uma lista de padrões com suporte, consulte formatos de padrão.

Incluir e excluir arquivos ou diretórios na linguagem MSBuild

Na linguagem MSBuild bruta (ou seja, sem nenhuma das importações padrão ou referência a um SDK), os itens que você deseja incluir são declarados separadamente ou como um grupo usando o Include atributo. Por exemplo:

<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>

Se você estiver usando curingas para incluir todos os arquivos em um diretório ou um conjunto aninhado de diretórios como entradas para um build, pode haver um ou mais arquivos no diretório ou em um diretório no conjunto aninhado de diretórios que você não deseja incluir. Para excluir um item da lista de itens, use o Exclude atributo.

Exclude não é realmente uma operação de item; ele não pode ser usado por si só, mas apenas como um modificador para Include.

Para incluir todos os arquivos .cs ou .vb, exceto Form2

  • Use um dos seguintes atributos: Include e Exclude

    <CSFile Include="*.cs" Exclude="Form2.cs"/>
    

    ou

    <VBFile Include="*.vb" Exclude="Form2.vb"/>
    

Para incluir todos .cs ou .vb arquivos, exceto Form2 e Form3

  • Use um dos seguintes atributos: Include e Exclude

    <CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
    

    ou

    <VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
    

Para incluir todos os .jpg arquivos em subdiretórios do Images diretório, exceto aqueles no Version2 diretório

  • Use os seguintes atributos Include e Exclude.

    <JPGFile
        Include="Images\**\*.jpg"
        Exclude = "Images\**\Version2\*.jpg"/>
    

    Observação

    Você deve especificar o caminho para ambos os atributos. Se você usar um caminho absoluto para especificar locais de Include arquivo no atributo, também deverá usar um caminho absoluto no Exclude atributo; se você usar um caminho relativo no Include atributo, também deverá usar um caminho relativo no Exclude atributo.

Excluir e remover

Se você estiver definindo suas próprias listas de itens, deverá usar Exclude sempre que possível. Há um benefício de desempenho em usar Exclude na mesma declaração que Include, já que os itens que seriam excluídos não precisam ser processados.

Use Remove quando você tiver uma lista de itens predefinida, como no caso das listas de itens padrão como Compile e Content. Nesse caso, Exclude não há suporte.

Observação

Se você estiver usando um SDK compatível com ele, poderá definir a $(OverrideDefaultCompileItems) propriedade como true, e definir seu próprio Compile item com Include e, opcionalmente, Exclude.

Usar condições para excluir um arquivo ou diretório das entradas de um build

Se houver itens que você deseja incluir, por exemplo, em um build de Depuração, mas não em um build de Versão, você poderá usar o Condition atributo para especificar as condições nas quais incluir o item.

Para incluir o arquivo Formula.vb somente em versões de lançamento

  • Use um Condition atributo semelhante ao seguinte:

    <Compile
        Include="Formula.vb"
        Condition=" '$(Configuration)' == 'Release' " />
    

Exemplo

O exemplo de código a seguir cria um projeto com todos os arquivos .cs no diretório, exceto Form2.cs.

<Project DefaultTargets="Compile">

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