Элемент 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>