Elemento Import (MSBuild)

Importa o conteúdo de um arquivo de projeto para outro arquivo de projeto.

<Project><Import>

Syntax

<Import Project="ProjectPath"
    Condition="'String A'=='String B'" />

Atributos e elementos

As seções a seguir descrevem atributos, elementos filho e elementos pai.

Atributos

Atributo Descrição
Project Atributo obrigatório.

O caminho do arquivo de projeto para importar. O caminho pode incluir caracteres curinga. Os arquivos correspondentes são importados na ordem de classificação. Usando esse recurso, você pode adicionar o código a um projeto simplesmente adicionando o arquivo de código para um diretório.
Condition Atributo opcional.

Uma condição a ser avaliada. Para obter mais informações, consulte Condições.
Label Atributo opcional.

Aplica um identificador a esse elemento de importação.
Sdk Atributo opcional.

Faz referência a um projeto do SDK.

Elementos filho

Nenhum

Elementos pai

Elemento Descrição
Projeto Elemento raiz necessário de um arquivo de projeto do MSBuild.
ImportGroup Contém uma coleção de elementos Import agrupados em uma condição opcional.

Comentários

Ao usar o elemento Import, você pode reutilizar o código que é comum a vários arquivos de projeto. Usar importações facilita a manutenção do código porque quaisquer atualizações feitas no código compartilhado são propagadas a todos os projetos que o importam.

Por convenção, os arquivos de projeto importados compartilhados são salvos como arquivos .targets, mas são arquivos de projeto MSBuild padrão. O MSBuild não impede a importação de um projeto que tem uma extensão de nome de arquivo diferente, mas recomendamos que você use a extensão .targets para manter a consistência.

Os caminhos relativos em projetos importados são interpretados em relação ao diretório do projeto de importação (com algumas poucas exceções descritas posteriormente neste parágrafo). Portanto, se um arquivo de projeto for importado em vários arquivos de projeto em locais diferentes, os caminhos relativos no arquivo de projeto importado serão interpretados de maneira diferente para cada projeto importado. Há duas exceções. Uma exceção é que, em elementos Import, o caminho é sempre interpretado em relação ao projeto que contém o elemento Import. Outra exceção é que UsingTask sempre interpreta o caminho relativo para o atributo AssemblyFile em relação ao arquivo que contém o elemento UsingTask.

Todas as propriedades reservadas do MSBuild relacionadas ao arquivo de projeto que sejam referenciadas em um projeto importado (por exemplo, MSBuildProjectDirectory e MSBuildProjectFile) são valores atribuídos com base no arquivo de projeto de importação.

Se o projeto importado não tiver um atributo DefaultTargets, os projetos importados serão inspecionados na ordem em que forem importados, e será usado o valor do primeiro atributo DefaultTargets descoberto. Por exemplo, se o ProjectA importar o ProjectB e o ProjectC (nessa ordem), e o ProjectB importar o ProjectD, o MSBuild procura primeiro pelo DefaultTargets especificado no ProjectA, depois no ProjectB, depois no ProjectD e, finalmente, no ProjectC.

O esquema de um projeto importado é idêntico ao de um projeto padrão. Embora o MSBuild possa criar um projeto importado, isso é improvável, porque um projeto importado normalmente não contém informações sobre quais propriedades configurar ou a ordem na qual executar os destinos. O projeto importado depende do projeto para o qual ele é importado para fornecer essas informações.

Curingas

No .NET Framework 4, o MSBuild permite caracteres curinga no atributo Projeto. Quando houver caracteres curinga, todas as correspondências encontradas são classificadas (para capacidade de reprodução) e, em seguida, elas são importadas na ordem como se a ordem tivesse sido definida explicitamente.

Isso é útil se você quiser oferecer um ponto de extensibilidade para que outra pessoa possa importar um arquivo sem exigir que você adicione explicitamente o nome do arquivo ao arquivo de importação. Para essa finalidade, o Microsoft.Common.Targets contém a linha a seguir na parte superior do arquivo.

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>

Exemplo

O exemplo a seguir mostra um projeto que tem vários itens e propriedades e importa um arquivo de projeto geral.

<Project DefaultTargets="Compile"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <resourcefile>Strings.resx</resourcefile>

        <compiledresources>
            $(O)\$(MSBuildProjectName).Strings.resources
        </compiledresources>
    </PropertyGroup>

    <ItemGroup>
        <CSFile Include="*.cs" />

        <Reference Include="System" />
        <Reference Include="System.Data" />
    </ItemGroup>

    <Import Project="$(CommonLocation)\General.targets" />
</Project>

Confira também