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

Обновлен: Ноябрь 2007

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

Использование элемента Import

Элемент Import служит для вставки одного файла проекта в другой файл проекта. Импортируемый файл проекта должен представлять собой допустимый MSBuild файл проекта и являться корректным документом XML. Атрибут Project задает путь к импортированному файлу проекта. Дополнительные сведения об элементе Import см. в разделе Элемент Import (MSBuild).

Чтобы импортировать проект:

  1. определите в файле импортируемого проекта все свойства и элементы, которые используются в качестве параметров для свойств и элементов в импортированном проекте.

  2. Используйте элемент Import для импортирования проекта. Например:

    <Import Project="MyCommon.targets"/>
    
  3. Отслеживая элемент Import, определите все свойства и элементы, значения которых необходимо применить вместо значений по умолчанию для свойств и элементов в импортированном проекте.

Порядок вычислений

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

Когда выполняется сборка проекта, сначала вычисляются все значения свойств, а затем — значения элементов. Например, следующая XML-схема определяет файл импортированного проекта MyCommon.targets:

<Project xmlns=”https://schemas.microsoft.com/developer/msbuild/2003”>
    <PropertyGroup>
        <Name>MyCommon</Name>
    </PropertyGroup>

    <Target Name="Go">
        <Message Text="Name="$(Name)""/>
    </Target>
</Project>

А эта XML-схема определяет файл MyApp.proj, с помощью которого импортируется файл MyCommon.targets:

<Project
    DefaultTargets="Go"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Name>MyApp</Name>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>

При построении проекта выводится следующее сообщение:

Name="MyCommon"

Поскольку проект импортируется после того как свойство Name было определено в MyApp.proj, определение Name в файле MyCommon.targets заменяет собой определение в файле MyApp.proj. Если проект импортируется до того как определено свойство Name, при построении появится следующее сообщение:

Name="MyApp"

При импортировании проектов воспользуйтесь следующим подходом.

  1. Определите в файле проекта все свойства и элементы, которые используются в качестве параметров для свойств и элементов в импортированном проекте.

  2. Импортируйте проект.

  3. Определите в файле проекта все свойства и элементы, которые должны заменить значения свойств и элементов по умолчанию в импортированном проекте.

Пример

В следующем примере кода представлен файл MyCommon.targets, который импортируется вторым примером кода. Файл в формате .targets вычисляет свойства импортирующего проекта, чтобы настроить построение.

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
        <Optimize Condition="'$(Flavor)'=='RETAIL'">yes</Optimize>
        <appname>$(MSBuildProjectName)</appname>
    <PropertyGroup>
    <Target Name="Build">
        <Csc Sources="hello.cs"
            Optimize="$(Optimize)"
            OutputAssembly="$(appname).exe"/>
    </Target>
</Project>

Следующий пример кода импортирует файл MyCommon.targets.

<Project DefaultTargets="Build"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor>RETAIL</Flavor>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>

См. также

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

Цели MSBuild

Ссылки

Элемент Import (MSBuild)