Элемент Import (MSBuild)
Импорт содержимого одного файла проекта в другой файл проекта.
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
Атрибуты и элементы
В следующих разделах описаны атрибуты, дочерние элементы и родительские элементы.
Атрибуты
Атрибут |
Описание |
---|---|
Project |
Обязательный атрибут. Путь к файлу проекта, который требуется импортировать. Путь может содержать подстановочные знаки. Соответствующие файлы импортируются в порядке сортировки. Используя эту функцию, можно добавить код в проект просто путем добавления файла кода в каталог. |
Condition |
Необязательный атрибут. Проверяемое условие. Дополнительные сведения см. в разделе Условия MSBuild. |
Дочерние элементы
None
Родительские элементы
Элемент |
Описание |
---|---|
Обязательный корневой элемент файла проекта MSBuild. |
|
Содержит коллекцию элементов 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>
См. также
Задачи
Как использовать одинаковый целевой объект в нескольких файлах проектов