Elemento Import (MSBuild)Import Element (MSBuild)

Importa el contenido de un archivo de proyecto en otro archivo de proyecto.Imports the contents of one project file into another project file.

<Project><Project>
<Import><Import>

SintaxisSyntax

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

Atributos y elementosAttributes and Elements

En las siguientes secciones se describen los atributos, los elementos secundarios y los elementos primarios.The following sections describe attributes, child elements, and parent elements.

AtributosAttributes

AtributoAttribute DescriptionDescription
Project Atributo necesario.Required attribute.

Ruta de acceso del archivo de proyecto que se va a importar.The path of the project file to import. La ruta puede incluir caracteres comodín.The path can include wildcards. Los archivos coincidentes se importan según el criterio de ordenación.The matching files are imported in sorted order. Mediante esta característica, puede agregar código a un proyecto simplemente agregando el archivo de código a un directorio.By using this feature, you can add code to a project just by adding the code file to a directory.
Condition Atributo opcional.Optional attribute.

Condición que se va a evaluar.A condition to be evaluated. Para obtener más información, consulte Condiciones.For more information, see Conditions.

Elementos secundariosChild Elements

NingunaNone

Elementos primariosParent Elements

ElementoElement DescriptionDescription
ProyectoProject Elemento raíz necesario de un archivo de proyecto MSBuildMSBuild .Required root element of an MSBuildMSBuild project file.
ImportGroupImportGroup Contiene una colección de elementos Import agrupados en una condición opcional.Contains a collection of Import elements grouped under an optional condition.

ComentariosRemarks

Mediante el elemento Import , puede reutilizar código común a muchos archivos de proyecto.By using the Import element, you can reuse code that is common to many project files. Esto facilita el mantenimiento del código, ya que las actualizaciones que realice en el código compartido se propagan a todos los proyectos que lo importen.This makes it easier to maintain the code because any updates you make to the shared code get propagated to all the projects that import it.

Por convención, los archivos compartidos del proyecto importado se guardan como archivos .targets, pero son archivos de proyecto de MSBuildMSBuild estándares.By convention, shared imported project files are saved as .targets files, but they are standard MSBuildMSBuild project files. MSBuildMSBuild no impide importar un proyecto que tenga una extensión de nombre de archivo diferente, pero se recomienda usar la extensión .targets para mantener la coherencia. does not prevent you from importing a project that has a different file name extension, but we recommend that you use the .targets extension for consistency.

Las rutas de acceso relativas de los proyectos importados se interpretan en relación con el directorio del proyecto que se importa.Relative paths in imported projects are interpreted relative to the directory of the importing project. Por lo tanto, si un archivo de proyecto se importa en varios archivos de proyecto en ubicaciones diferentes, las rutas de acceso relativas del archivo de proyecto importado se interpretarán de manera diferente para cada proyecto importado.Therefore, if a project file is imported into several project files in different locations, the relative paths in the imported project file will be interpreted differently for each imported project.

Se asignan valores basados en el archivo del proyecto que se importa a todas las propiedades reservadas de MSBuildMSBuild relacionadas con el archivo de proyecto (por ejemplo, MSBuildProjectDirectory y MSBuildProjectFile) a las que se hace referencia en un proyecto importado.All MSBuildMSBuild reserved properties that relate to the project file, for example, MSBuildProjectDirectory and MSBuildProjectFile, that are referenced in an imported project are assigned values based on the importing project file.

Si el proyecto importado no tiene un atributo DefaultTargets , los proyectos importados se examinan en el orden en que se importan y se usa el valor del primer atributo DefaultTargets detectado.If the imported project does not have a DefaultTargets attribute, imported projects are inspected in the order that they are imported, and the value of the first discovered DefaultTargets attribute is used. Por ejemplo, si ProyectoA importa ProyectoB y ProyectoC (en ese orden), y ProyectoB importa ProyectoD, MSBuildMSBuild primero busca el atributo DefaultTargets especificado en ProyectoA, después en ProyectoB, luego en ProyectoD y, por último, en ProyectoC.For example, if ProjectA imports ProjectB and ProjectC (in that order), and ProjectB imports ProjectD, MSBuildMSBuild first looks for DefaultTargets specified on ProjectA, then ProjectB, then ProjectD, and finally ProjectC.

El esquema de un proyecto importado es idéntico al de un proyecto estándar.The schema of an imported project is identical to that of a standard project. Aunque MSBuildMSBuild puede compilar un proyecto importado, es poco probable que lo haga porque un proyecto importado no suele contener información sobre las propiedades que se establecen o el orden en el que se ejecutan los destinos.Although MSBuildMSBuild may be able to build an imported project, it is unlikely because an imported project typically does not contain information about which properties to set or the order in which to run targets. El proyecto importado depende del proyecto en el que se importa para obtener esa información.The imported project depends on the project into which it is imported to provide that information.

Nota

Mientras que las instrucciones de importación condicional funcionan en compilaciones de MSBuild de línea de comandos, no funcionan con MSBuild en el entorno de desarrollo integrado (IDE) de Visual StudioVisual Studio .While conditional import statements work in command-line MSBuilds, they do not work with MSBuild in the Visual StudioVisual Studio integrated development environment (IDE). Las importaciones condicionales se evalúan usando los valores de configuración y de la plataforma que se establecen cuando se carga el proyecto.Conditional imports are evaluated by using the configuration and platform values that are set when the project is loaded. Si posteriormente se realizan cambios que requieren una reevaluación de los condicionales del archivo de proyecto (por ejemplo, si cambia la plataforma), Visual StudioVisual Studio vuelve a evaluar las condiciones de las propiedades y los elementos, pero no de las importaciones.If changes are subsequently made that require a reevaluation of the conditionals in the project file, for example, changing the platform, Visual StudioVisual Studio reevaluates the conditions on properties and items, but not on imports. Dado que no se reevalúa el condicional de importación, se omitirá la importación.Because the import conditional is not reevaluated, the import is skipped.

Para solucionar este problema, coloque las importaciones condicionales en los archivos .targets o coloque código en un bloque condicional, como un bloque Choose Element (MSBuild) .To work around this, put conditional imports in the .targets files or put code in a conditional block such as a Choose Element (MSBuild) block.

Caracteres comodínWildcards

En .NET Framework 4, MSBuild permite caracteres comodín en el atributo Project.In the .NET Framework 4, MSBuild allows wildcards in the Project attribute. Cuando hay caracteres comodín, se ordenan todas las coincidencias encontradas (para la reproducibilidad) y, después, se importan en ese orden como si dicho orden se hubiera establecido explícitamente.When there are wildcards, all matches found are sorted (for reproducibility), and then they are imported in that order as if the order had been explicitly set.

Esto es útil si quiere ofrecer un punto de extensibilidad para que otra persona pueda importar un archivo sin que usted tenga que agregar explícitamente el nombre del archivo al archivo de importación.This is useful if you want to offer an extensibility point so that someone else can import a file without requiring you to explicitly add the file name to the importing file. Para este propósito, Microsoft.Common.Targets contiene la siguiente línea en la parte superior del archivo.For this purpose, Microsoft.Common.Targets contains the following line at the top of the file.

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

EjemploExample

En el ejemplo siguiente se muestra un proyecto que tiene varios elementos y propiedades y que importa un archivo de proyecto general.The following example shows a project that has several items and properties and imports a general project file.

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

Vea tambiénSee Also

Referencia de esquemas de archivo del proyecto Project File Schema Reference
Cómo: Usar el mismo destino en varios archivos de proyectoHow to: Use the Same Target in Multiple Project Files