Элемент Import (MSBuild)
Обновлен: Ноябрь 2007
Импорт содержимого одного файла проекта в другой файл проекта.
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
Атрибуты и элементы
В следующих разделах описаны атрибуты, дочерние и родительские элементы.
Атрибуты
Атрибут |
Описание |
---|---|
Project |
Обязательный атрибут. Путь к файлу проекта, который требуется импортировать. |
Condition |
Необязательный атрибут. Проверяемое условие. Дополнительные сведения см. в разделе Условия MSBuild. |
Дочерние элементы
Нет
Родительские элементы
Элемент |
Описание |
---|---|
Обязательный корневой элемент файла проекта MSBuild. |
Заметки
Элемент Import позволяет повторно использовать общий фрагмента кода для нескольких файлов проектов. Перемещение общих блоков кода в другие файлы проектов позволяет хранить код и вносить в него изменения централизованно. Например, проект А и проект Б задают определенные значения элемента и свойства для своих сборок, а проект В содержит общий процесс построения. Проект А и проект Б могут импортировать проект В, при этом любые изменения в процесс построения вносятся только в один файл.
Общие импортируемые файлы проекта сохраняются по соглашению в виде файлов с расширением TARGETS, за исключением стандартных файлов проектов MSBuild. MSBuild не запрещает импортирование файлов проекта с другими расширениями, но для согласованности рекомендуется использовать расширение TARGETS.
Все относительные пути в импортируемых проектах интерпретируются относительно каталога импортируемого проекта. Таким образом, если файл проекта импортируется в несколько файлов проектов в разных расположениях, относительные пути в импортируемом файле проекта будут интерпретироваться по-разному для каждого импортированного проекта.
Значения всех зарезервированных свойств MSBuild, относящихся к файлу проекта (например MSBuildProjectDirectory и MSBuildProjectFile), на которые есть ссылки в импортируемом проекте, присваиваются на основе импортирующего файла проекта.
Если импортируемый проект не имеет атрибута DefaultTargets, проверка импортируемых проектов выполняется в порядке их импорта с использованием значения первого обнаруженного атрибута DefaultTargets. Например, если проект А импортирует проект Б и проект В (в указанном порядке), а проект Б импортирует проект Д, то MSBuild сначала выполняет поиск атрибута DefaultTargets в проекте А, затем в проекте Б, затем в проекте Д и, наконец, в проекте В.
Схема импортируемого проекта идентична схеме стандартного проекта. Построение импортируемого проекта в MSBuild возможно, но вероятны сбои из-за того, что импортируемый проект обычно не содержит сведений о том, какие свойства следует установить или в каком порядке выполнять целевые объекты. Импортируемый проект получает эти сведения из проекта, в который он импортируется.
![]() |
---|
Хотя операторы условного импорта работают в командной строке MSBuilds, они не работают с MSBuild, размещенным в интегрированной среде разработки (IDE) Visual Studio. Проверка условных импортов выполняется с использованием начальной конфигурации и стандартных значений платформы, заданных при загрузке проекта. При последующем внесении изменений, требующих перепроверки условий в файле проекта, таких как изменение платформы, Visual Studio выполняет повторную проверку условий для свойств и элементов, но не импортов. Поскольку условия импорта не перепроверяются, импорт пропускается. Для того чтобы обойти эту проблему, размещайте условные импорты в TARGETS-файлах или размещайте код в условных блоках, таких как Элемент Choose (MSBuild). |
Пример
Следующий пример кода показывает проект, выполняющий настройку нескольких элементов и свойств, а также импорт общего файла проекта.
<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>
См. также
Задачи
Как использовать одинаковый целевой объект в нескольких файлах проектов