Procedimiento Usar el mismo destino en varios archivos de proyectoHow to: Use the same target in multiple project files

Si ha creado varios archivos de proyecto con MSBuild, es posible que haya detectado la necesidad de utilizar las mismas tareas y destinos en los distintos archivos de proyecto.If you have authored several MSBuild project files, you might have discovered that you need to use the same tasks and targets in different project files. En lugar de incluir la descripción completa de estas tareas o destinos en cada archivo de proyecto, puede guardar un destino en un archivo de proyecto independiente y, a continuación, importarlo en un proyecto que necesite utilizar dicho destino.Instead of including the complete description of those tasks or targets in every project file, you can save a target in a separate project file and then import that project into any other project that needs to use the target.

Usar el elemento ImportUse the Import element

El elemento Import se utiliza para insertar un archivo de proyecto en otro archivo de proyecto.The Import element is used to insert one project file into another project file. El archivo de proyecto que se importa debe ser un archivo de proyecto de MSBuild válido y contener XML con formato correcto.The project file that is being imported must be a valid MSBuild project file and contain well-formed XML. El atributo Project especifica la ruta de acceso al archivo de proyecto importado.The Project attribute specifies the path to the imported project file. Para obtener más información sobre el elemento Import, vea Elemento Import (MSBuild).For more information on the Import element, see Import element (MSBuild).

Para importar un proyectoTo import a project

  1. En el archivo de proyecto de importación, defina todas las propiedades y elementos utilizados como parámetros para las propiedades y elementos del proyecto importado.Define, in the importing project file, all properties and items that are used as parameters for properties and items in the imported project.

  2. Utilice el elemento Import para importar el proyecto.Use the Import element to import the project. Por ejemplo:For example:

    <Import Project="MyCommon.targets"/>

  3. A continuación del elemento Import, defina todas las propiedades y elementos que deben reemplazar las definiciones predeterminadas de las propiedades y los elementos del proyecto importado.Following the Import element, define all properties and items that must override default definitions of properties and items in the imported project.

Orden de evaluaciónOrder of evaluation

Cuando MSBuild alcanza un elemento Import, el proyecto importado se inserta de manera efectiva en el proyecto de importación en la ubicación del elemento Import.When MSBuild reaches an Import element, the imported project is effectively inserted into the importing project at the location of the Import element. Por tanto, la ubicación del elemento Import puede afectar a los valores de propiedades y elementos.Therefore, the location of the Import element can affect the values of properties and items. Es importante comprender las propiedades y elementos que especifica el proyecto importado, así como las propiedades y los elementos que utiliza dicho proyecto.It is important to understand the properties and items that are set by the imported project, and the properties and items that the imported project uses.

Cuando se compila el proyecto, primero se evalúan todas las propiedades y después, los elementos.When the project builds, all properties are evaluated first, followed by items. Por ejemplo, en el código XML siguiente se define el archivo de proyecto importado MyCommon.targets :For example, the following XML defines the imported project file 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>

En el código XML siguiente se define MyApp.proj , que importa MyCommon.targets :The following XML defines MyApp.proj , which imports MyCommon.targets :

<Project
    DefaultTargets="Go"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Name>MyApp</Name>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>

Cuando se compila el proyecto, se muestra el mensaje siguiente:When the project builds, the following message is displayed:

Name="MyCommon"

Dado que el proyecto se importa una vez definida la propiedad Name en MyApp.proj , la definición de Name en MyCommon.targets reemplaza la definición en MyApp.proj .Because the project is imported after the property Name has been defined in MyApp.proj , the definition of Name in MyCommon.targets overrides the definition in MyApp.proj . Si se importara el proyecto antes de definir la propiedad Name, la compilación mostraría el siguiente mensaje:If the project is imported before the property Name is defined, the build would display the following message:

Name="MyApp"

Utilice el enfoque siguiente al importar los proyectosUse the following approach when importing projects

  1. En el archivo de proyecto, defina todas las propiedades y los elementos utilizados como parámetros para las propiedades y los elementos del proyecto importado.Define, in the project file, all properties and items that are used as parameters for properties and items in the imported project.

  2. Importe el proyecto.Import the project.

  3. En el archivo de proyecto, defina todas las propiedades y los elementos que deben reemplazar las definiciones predeterminadas de propiedades y elementos del proyecto importado.Define in the project file all properties and items that must override default definitions of properties and items in the imported project.

Ejemplo 1Example 1

En el ejemplo de código siguiente se muestra el archivo MyCommon.targets importado por el segundo ejemplo de código.The following code example shows the MyCommon.targets file that the second code example imports. El archivo .targets evalúa las propiedades del proyecto de importación para configurar la compilación.The .targets file evaluates properties from the importing project to configure the 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>

Ejemplo 2Example 2

En el ejemplo de código siguiente se importa el archivo MyCommon.targets .The following code example imports the MyCommon.targets file.

<Project DefaultTargets="Build"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor>RETAIL</Flavor>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>

Vea tambiénSee also