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


Элемент Import (MSBuild)

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

<Импорт проекта><>

Синтаксис

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

Атрибуты и элементы

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

Attributes

Свойство 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 может быть в состоянии создать импортированный проект, маловероятно, так как импортированный проект обычно не содержит сведений о том, какие свойства следует задать или порядок выполнения целевых объектов. Импортированный проект зависит от проекта, в который он импортируется для предоставления этой информации.

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

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

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

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

Example

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

<Project DefaultTargets="Compile">

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

См. также