Поделиться через


Элемент Import (MSBuild)

Импортирует содержимое одного файла проекта в другой файл проекта.

<Project><Import>

Синтаксис

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

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

В следующих разделах описаны атрибуты, дочерние и родительские элементы.

Атрибуты

Атрибут Description
Project Обязательный атрибут элемента .

Путь к импортируемому файлу проекта. Этот путь может содержать подстановочные знаки. Совпадающие файлы импортируются в отсортированном порядке. С помощью этой функции можно добавить код в проект, просто добавив файл кода в каталог.
Condition Необязательный атрибут элемента .

Проверяемое условие. Дополнительные сведения см. в разделе Условия.
Label Необязательный атрибут элемента .

Применяет идентификатор к этому элементу импорта.
Sdk Необязательный атрибут элемента .

Ссылка на пакет SDK для проекта.

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

None

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

Элемент Description
Проект Обязательный корневой элемент файла проекта MSBuild.
ImportGroup Содержит коллекцию элементов Import , сгруппированных по необязательному условию.

Замечания

С помощью элемента Import можно повторно использовать код, который является общим для нескольких файлов проекта. Использование импорта упрощает обслуживание кода, так как все изменения, внесенные в общий код, распространяются по всем проектам, которые его импортируют.

По соглашению общие импортированные файлы проекта сохраняются в виде .targets файлов, но они являются стандартными файлами проекта MSBuild. MSBuild не препятствует импорту проекта с другим расширением имени файла, но рекомендуется использовать .targets расширение для согласованности.

Относительные пути в импортируемых проектах интерпретируются относительно каталога импортируемого проекта (за исключением нескольких случаев, описываемых далее в этом абзаце). Таким образом, если файл проекта импортируется в несколько файлов проектов, находящихся в разных расположениях, относительные пути в импортируемом файле проекта будут интерпретироваться по-разному для каждого импортируемого проекта. Есть два исключения. Во-первых, в элементах Import путь всегда интерпретируется относительно проекта, содержащего элемент Import. Во-вторых, UsingTask всегда интерпретирует относительный путь для атрибута AssemblyFile относительно файла, содержащего элемент UsingTask.

Всем зарезервированным свойствам MSBuild, относящимся к файлу проекта, на которые содержатся ссылки в импортируемом проекте (например MSBuildProjectDirectory и MSBuildProjectFile), значения присваиваются в зависимости от импортируемого файла проекта.

Если у импортируемого проекта нет атрибута DefaultTargets, импортируемые проекты проверяются в порядке импорта и используется значение первого обнаруженного атрибута DefaultTargets. Например, если ProjectA импортирует ProjectB и ProjectC (в таком порядке), а ProjectB импортирует ProjectD, MSBuild сначала ищет DefaultTargets в ProjectA, затем в ProjectB, затем в ProjectD и наконец в ProjectC.

Схема импортируемого проекта идентична схеме стандартного проекта. Хотя MSBuild может быть в состоянии выполнить сборку импортируемого проекта, это маловероятно, так как импортируемый проект обычно не содержит сведения о задании свойств или порядке выполнения целевых объектов. В отношении получения этих сведений импортируемый проект зависит от проекта, в который он импортируется.

Подстановочные знаки

В .NET Framework 4 MSBuild позволяет использовать в атрибуте Project подстановочные знаки. При наличии подстановочных знаков все найденные совпадения сортируются (для обеспечения повторяемости), а затем импортируются в полученном порядке, как если бы он был задан явно.

Это удобно, если вы хотите предложить точку расширяемости, чтобы кто-то еще мог импортировать файл без явного добавления вами имени файла в импортируемый файл. Для этого Microsoft.Common.Targets содержит следующую строку в начале файла.

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

Пример

В следующем примере показан проект, который содержит несколько элементов и свойств и импортирует общий файл проекта.

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

См. также