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


Элемент Import (MSBuild)

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

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

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

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

Атрибуты

Атрибут

Описание

Project

Обязательный атрибут.

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

Condition

Необязательный атрибут.

Проверяемое условие. Дополнительные сведения см. в разделе Условия MSBuild.

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

None

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

Элемент

Описание

Проект

Обязательный корневой элемент файла проекта MSBuild.

ImportGroup

Содержит коллекцию элементов Import, сгруппированных по дополнительное условие.

Заметки

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

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

Относительные пути в импортируемых проектах интерпретируются относительно каталога импортируемого проекта. Таким образом, если файл проекта импортируется в несколько файлов проектов в разных расположениях, относительные пути в импортируемом файле проекта будут интерпретироваться по-разному для каждого импортированного проекта.

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

Если импортируемый проект не имеет атрибута DefaultTargets, проверка импортируемых проектов выполняется в порядке их импорта с использованием значения первого обнаруженного атрибута DefaultTargets. Например, если проект А импортирует проект Б и проект В (в указанном порядке), а проект Б импортирует проект Д, то MSBuild сначала выполняет поиск атрибута DefaultTargets в проекте А, затем в проекте Б, затем в проекте Д и, наконец, в проекте В.

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

Примечание

Хотя операторы условного импорта работают в командной строке MSBuilds, они не работают с MSBuild в интегрированной среде разработки (IDE) Visual Studio.Условного импорта оцениваются с помощью значений конфигурации и платформы, которые устанавливаются при загрузке проекта. Если изменения впоследствии, требуют переоценки условий в файле проекта, например, изменение платформы, Visual Studio выполняет переоценку условий для свойств и элементов, но не для импорта.Поскольку условия импорта не перепроверяются, импорт пропускается.

Для того чтобы обойти эту проблему, размещайте условные импорты в TARGETS-файлах или размещайте код в условных блоках, таких как Элемент Choose (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="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>

См. также

Задачи

Как использовать одинаковый целевой объект в нескольких файлах проектов

Основные понятия

Справочные сведения о схеме файлов проектов MSBuild