Элемент Import (MSBuild)

 

Опубликовано: Октябрь 2016

Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.

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

<Project>
<Import>

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

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

Атрибуты

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

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

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

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

Нет

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

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

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

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

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

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

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

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

System_CAPS_ICON_note.jpg Примечание

Хотя операторы условного импорта работают в 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="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>  

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

Показ: