Usar o mesmo destino em vários arquivos de projeto
Se tiver criado vários arquivos de projeto do MSBuild, talvez você tenha descoberto que precisa usar as mesmas tarefas e destinos em diferentes arquivos de projeto. Em vez de incluir a descrição completa dessas tarefas ou destinos em todos os arquivos de projeto, você pode salvar um destino em um arquivo de projeto separado e, em seguida, importar o projeto para qualquer outro projeto que precise usar o destino.
Usar o elemento Import
O elemento Import
é usado para inserir um arquivo de projeto em outro arquivo de projeto. O arquivo de projeto que está sendo importado deve ser um arquivo de projeto do MSBuild válido e conter XML bem formado. O atributo Project
especifica o caminho para o arquivo de projeto importado. Para obter mais informações sobre o elemento Import
, confira Elemento Import (MSBuild).
Para importar um projeto
Defina, no arquivo de projeto para o qual está sendo realizada a importação, todas as propriedades e itens que são usados como parâmetros para propriedades e itens no projeto importado.
Use o elemento
Import
para importar o projeto. Por exemplo:<Import Project="MyCommon.targets"/>
Após o elemento
Import
, defina todas as propriedades e itens que devem substituir as definições padrão de propriedades e itens no projeto importado.
Ordem de avaliação
Quando o MSBuild atinge um elemento Import
, o projeto importado é inserido efetivamente no projeto para o qual está sendo realizada a importação, no local do elemento Import
. Portanto, o local do elemento Import
pode afetar os valores de propriedades e de itens. É importante entender as propriedades e os itens que são definidos pelo projeto importado e as propriedades e itens usados pelo projeto importado.
Quando o projeto é compilado, todas as propriedades são avaliadas primeiro, seguidas dos itens. Por exemplo, o seguinte XML define o arquivo de projeto importado MyCommon.targets:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>MyCommon</Name>
</PropertyGroup>
<Target Name="Go">
<Message Text="Name=$(Name)"/>
</Target>
</Project>
O seguinte XML define MyApp.proj, que importa MyCommon.targets:
<Project
DefaultTargets="Go"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>MyApp</Name>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>
Quando o projeto é compilado, a seguinte mensagem é exibida:
Name="MyCommon"
Como o projeto é importado depois de a propriedade Name
ser definida em MyApp.proj, a definição de Name
em MyCommon.targets substitui a definição em MyApp.proj. Se o projeto é importado antes de a propriedade Name ser definida, o build exibe a seguinte mensagem:
Name="MyApp"
Usar a abordagem a seguir ao importar projetos
Defina, no arquivo de projeto, todas as propriedades e itens que são usados como parâmetros para propriedades e itens no projeto importado.
Importe o projeto.
Defina, no arquivo de projeto, todas as propriedades e itens que devem substituir as definições padrão de propriedades e itens no projeto importado.
Exemplo 1
O exemplo de código a seguir mostra o arquivo MyCommon.targets, importado pelo segundo exemplo de código. O arquivo .targets avalia propriedades do projeto de importação para configurar o build.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
<Optimize Condition="'$(Flavor)'=='RETAIL'">yes</Optimize>
<appname>$(MSBuildProjectName)</appname>
<PropertyGroup>
<Target Name="Build">
<Csc Sources="hello.cs"
Optimize="$(Optimize)"
OutputAssembly="$(appname).exe"/>
</Target>
</Project>
Exemplo 2
O exemplo de código a seguir importa o arquivo MyCommon.targets.
<Project DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flavor>RETAIL</Flavor>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>