Elemento Import (MSBuild)
Importa el contenido de un archivo de proyecto en otro archivo de proyecto.
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
Atributos y elementos
En las próximas secciones se describen los atributos, los elementos secundarios y los elementos primarios.
Atributos
Atributo |
Descripción |
---|---|
Project |
Atributo necesario. Ruta de acceso del archivo de proyecto que desea importar.La ruta de acceso puede incluir caracteres comodín.Se importan los archivos coincidentes según el criterio de ordenación.Mediante el uso de esta característica, puede agregar código a un proyecto simplemente añadiendo el archivo de código a un directorio. |
Condition |
Atributo opcional. Una condición que se va a evaluar.Para obtener más información, vea Condiciones de MSBuild. |
Elementos secundarios
None
Elementos primarios
Elemento |
Descripción |
---|---|
Elemento raíz necesario de un archivo de proyecto de MSBuild. |
|
Contiene una colección de elementos Import agrupados bajo una condición opcional. |
Comentarios
Si usa el elemento Import, puede reutilizar el código que sea común a muchos archivos de proyecto.Esto facilita el mantenimiento del código porque las actualizaciones que realice en el código compartido se propagarán a todos los proyectos que lo importen.
Por convención, los archivos de proyecto importados compartidos se guardan como archivos .targets, pero son archivos de proyecto estándar de MSBuild.MSBuild no impide importar un proyecto que tenga una extensión de nombre de archivo diferente, pero se recomienda utilizar la extensión .targets por cuestión de coherencia.
Las rutas de acceso relativas de los proyectos importados se interpretan en función del directorio del proyecto de importación.Por tanto, si un archivo de proyecto se importa en varios archivos de proyecto situados en ubicaciones diferentes, estas rutas relativas se interpretarán de manera diferente en cada proyecto importado.
Todas las propiedades reservadas de MSBuild relacionadas con el archivo de proyecto, por ejemplo, MSBuildProjectDirectory y MSBuildProjectFile, a las que se hace referencia en un proyecto importado tienen valores asignados en función del archivo de proyecto de importación.
Si el proyecto importando no tiene un atributo DefaultTargets, los proyectos importados se inspeccionan en el orden en que se importaron y se utilizará el valor del primer atributo DefaultTargets detectado.Por ejemplo, si el Proyecto A importa el Proyecto B y el Proyecto C (en este orden), y el Proyecto B importa el Proyecto D, MSBuild buscará primero los DefaultTargets especificados en el Proyecto A, luego en el Proyecto B, luego en el Proyecto D y, por último, en el Proyecto C.
El esquema de un proyecto importado es idéntico al de un proyecto estándar.Aunque MSBuild puede ser capaz de compilar un proyecto importado, es poco probable porque un proyecto importado normalmente no contiene información sobre qué propiedades se deben establecer o el orden en que se deben ejecutar los objetivos.El proyecto importado depende del proyecto en el que se importa para proporcionar esa información.
[!NOTA]
Aunque las instrucciones de importación condicionales funcionan en compilaciones de MSBuild de la línea de comandos, no funcionan con un MSBuild en el entorno de desarrollo integrado (IDE) de Visual Studio.Las importaciones condicionales se evalúan utilizando los valores de configuración y plataforma que se establecen cuando se carga el proyecto. Si posteriormente se realizan modificaciones que requieren una reevaluación de los condicionales en el archivo de proyecto, por ejemplo, cambiar la plataforma, Visual Studio volverá evaluar las condiciones en las propiedades y elementos, pero no en las importaciones.Debido a que no se vuelve a evaluar las instrucciones condicionales de importación, la importación se omite.
Para solucionarlo, coloque importaciones condicionales en los archivos .targets o coloque código en un bloque condicional, por ejemplo, un bloque Elemento Choose (MSBuild).
Caracteres comodín
En.NET Framework 4, MSBuild permite caracteres comodín en el atributo Project.Cuando hay caracteres comodín, se ordenan todas las coincidencias encontradas (para reproducibilidad) y, a continuación, se importan en dicho orden como si éste se hubiera establecido explícitamente.
Esto es útil si desea ofrecer un punto de extensibilidad para que alguien más pueda importar un archivo sin necesidad de agregar explícitamente el nombre de archivo al archivo de importación.Para ello, Microsoft.Common.Targets contiene la siguiente línea en la parte superior del archivo.
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>
Ejemplo
En el ejemplo siguiente se muestra un proyecto que tiene varios elementos y propiedades e importa un archivo de proyecto general.
<Project DefaultTargets="Compile"
xmlns="https://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>
Vea también
Tareas
Cómo: Utilizar el mismo destino en varios archivos de proyecto