Элемент Import (MSBuild)Import element (MSBuild)

Импортирует содержимое одного файла проекта в другой файл проекта.Imports the contents of one project file into another project file.

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

СинтаксисSyntax

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

Элементы и атрибутыAttributes and elements

В следующих разделах описаны атрибуты, дочерние и родительские элементы.The following sections describe attributes, child elements, and parent elements.

АтрибутыAttributes

АтрибутAttribute ОписаниеDescription
Project Обязательный атрибут.Required attribute.

Путь к импортируемому файлу проекта.The path of the project file to import. Этот путь может содержать подстановочные знаки.The path can include wildcards. Совпадающие файлы импортируются в отсортированном порядке.The matching files are imported in sorted order. С помощью этой функции можно добавить код в проект, просто добавив файл кода в каталог.By using this feature, you can add code to a project just by adding the code file to a directory.
Condition Необязательный атрибут.Optional attribute.

Проверяемое условие.A condition to be evaluated. Дополнительные сведения см. в разделе Условия.For more information, see Conditions.

Дочерние элементыChild elements

НетNone

Родительские элементыParent elements

ЭлементElement ОписаниеDescription
ProjectProject Обязательный корневой элемент файла проекта MSBuildMSBuild .Required root element of an MSBuildMSBuild project file.
ImportGroupImportGroup Содержит коллекцию элементов Import , сгруппированных по необязательному условию.Contains a collection of Import elements grouped under an optional condition.

ПримечанияRemarks

С помощью элемента Import можно повторно использовать код, который является общим для нескольких файлов проекта.By using the Import element, you can reuse code that is common to many project files. Это упрощает обслуживание кода, так как все изменения, внесенные в общий код, распространяются по всем проектам, которые его импортируют.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.

По соглашению общие импортируемые файлы проекта сохраняются с расширением TARGETS, но являются стандартными файлами проекта MSBuildMSBuild.By convention, shared imported project files are saved as .targets files, but they are standard MSBuildMSBuild project files. MSBuildMSBuild не запрещает импортировать проект с другим расширением файла, однако в целях согласованности рекомендуется использовать расширение TARGETS.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.

Относительные пути в импортируемых проектах интерпретируются относительно каталога импортируемого проекта.Relative paths in imported projects are interpreted relative to the directory of the importing project. Таким образом, если файл проекта импортируется в несколько файлов проектов, находящихся в разных расположениях, относительные пути в импортируемом файле проекта будут интерпретироваться по-разному для каждого импортируемого проекта.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.

Всем зарезервированным свойствам MSBuildMSBuild , относящимся к файлу проекта, например MSBuildProjectDirectory и MSBuildProjectFile, на которые имеются ссылки в импортируемом проекте, значения присваиваются в зависимости от импортируемого файла проекта.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.

Если у импортируемого проекта нет атрибута DefaultTargets , импортируемые проекты проверяются в порядке импорта и используется значение первого обнаруженного атрибута DefaultTargets .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. Например, если ProjectA импортирует ProjectB и ProjectC (в таком порядке), а ProjectB импортирует ProjectD, MSBuildMSBuild сначала ищет DefaultTargets в ProjectA, затем в ProjectB, затем в ProjectD и наконец в ProjectC.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.

Схема импортируемого проекта идентична схеме стандартного проекта.The schema of an imported project is identical to that of a standard project. Хотя MSBuildMSBuild может быть в состоянии выполнить сборку импортируемого проекта, это маловероятно, так как импортируемый проект обычно не содержит сведения о задании свойств или порядке выполнения целевых объектов.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. В отношении получения этих сведений импортируемый проект зависит от проекта, в который он импортируется.The imported project depends on the project into which it is imported to provide that information.

Note

Хотя операторы условного импорта работают в MSBuilds в командной строке, они не работают с MSBuild в интегрированной среде разработки (IDE) 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). Проверка условных импортов выполняется с использованием значений конфигурации и платформы, задаваемых при загрузке проекта.Conditional imports are evaluated by using the configuration and platform values that are set when the project is loaded. Если впоследствии вносятся изменения, требующие перепроверки условий в файле проекта, например изменение платформы, Visual StudioVisual Studio повторяет проверку условий для свойств и элементов, но не для импортов.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. Поскольку условия импорта не перепроверяются, импорт пропускается.Because the import conditional is not reevaluated, the import is skipped.

Чтобы обойти это, поместите условные импорты в файлы TARGETS или поместите код в условный блок, например Элемент Choose (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.

Знаки подстановкиWildcards

В .NET Framework 4 MSBuild позволяет использовать в атрибуте Project подстановочные знаки.In the .NET Framework 4, MSBuild allows wildcards in the Project attribute. При наличии подстановочных знаков все найденные совпадения сортируются (для обеспечения повторяемости), а затем импортируются в полученном порядке, как если бы он был задан явно.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.

Это удобно, если вы хотите предложить точку расширяемости, чтобы кто-то еще мог импортировать файл без явного добавления вами имени файла в импортируемый файл.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. Для этого Microsoft.Common.Targets содержит следующую строку в начале файла.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')"/>  

ПримерExample

В следующем примере показан проект, который содержит несколько элементов и свойств и импортирует общий файл проекта.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>  

См. такжеSee also

Справочник по схеме файла проекта Project file schema reference
Практическое руководство. Использование одного целевого объекта в нескольких файлах проектовHow to: Use the same target in multiple project files