Поделиться через


Практическое руководство. Расширение процесса построения Visual Studio

Процесс построения Visual Studio определен в серии файлов MSBuild .targets, которые импортируются в файл проекта.Один из импортированных файлов, Microsoft.Common.targets, можно расширить, добавив возможность выполнения пользовательских задач в нескольких точках процесса построения.В данном разделе описываются два способа расширения процесса построения Visual Studio.

  • Переопределение конкретных предопределенных целевых объектов, определения которых содержатся в файле Microsoft.Common.targets.

  • Переопределение свойств "DependsOn", определения которых содержатся в файле Microsoft.Common.targets.

Переопределение предопределенных целевых объектов

В файле Microsoft.Common.targets содержится ряд предопределенных пустых целевых объектов, которые в процессе построения вызываются до и после некоторых основных целевых объектов.Например, MSBuild вызывает целевой объект BeforeBuild перед основным целевым объектом CoreBuild и целевой объект AfterBuild после основного целевого объекта CoreBuild.По умолчанию пустые целевые объекты в файле Microsoft.Common.targets не выполняют никаких действий, но их заданное по умолчанию поведение можно переопределить, определяя нужные целевые объекты в файле проекта, в который импортируется файл Microsoft.Common.targets.При этом можно с помощью задач MSBuild получить больший контроль над процессом построения.

Переопределение предопределенных целевых объектов

  1. В файле Microsoft.Common.targets выберите предопределенный целевой объект, который нужно переопределить.В приведенной ниже таблице содержится полный список целевых объектов, которые можно без опаски переопределить.

  2. Определите целевой объект или целевые объекты в конце файла проекта, сразу после тега </Project>.Примеры.

    <Project>
        ...
        <Target Name="BeforeBuild">
            <!-- Insert tasks to run before build here -->
        </Target>
        <Target Name="AfterBuild">
            <!-- Insert tasks to run after build here -->
        </Target>
    </Project>
    
  3. Создайте файл проекта.

В следующей таблице показаны все целевые объекты из файла Microsoft.Common.targets , которые можно без опаски переопределить.

Целевое имя

Описание

BeforeCompile, AfterCompile

Задачи, добавленные в один из этих целевых объектов, выполняются до или после основной компиляции.Большая часть настроек выполняется в одном из этих двух целевых объектов.

BeforeBuild, AfterBuild

Задачи, добавленные в один из этих целевых объектов, выполняются до или после какой-либо операции в построении.

ПримечаниеПримечание
Целевые объекты BeforeBuild и AfterBuild уже определены в комментариях в конце большинства файлов проекта.Благодаря этому вы можете просто добавить в файл проекта события, выполняемые до и после построения.

BeforeRebuild, AfterRebuild

Задачи, добавленные в один из этих целевых объектов, выполняются до или после вызова основных функций повторного построения.Порядок выполнения целевых объектов в файле Microsoft.Common.targets: BeforeRebuild, Clean, Build, а затем AfterRebuild.

BeforeClean, AfterClean

Задачи, добавленные в один из этих целевых объектов, выполняются до или после вызова основных функций очистки.

BeforePublish, AfterPublish

Задачи, добавленные в один из этих целевых объектов, выполняются до или после вызова основных функций публикации.

BeforeResolveReference, AfterResolveReferences

Задачи, добавленные в один из этих целевых объектов, выполняются до или после разрешения ссылок построения.

BeforeResGen, AfterResGen

Задачи, добавленные в один из этих целевых объектов, выполняются до или после создания ресурсов.

Переопределение свойств "DependsOn"

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

Для защиты от нежелательных переопределений целевых объектов можно переопределить свойства "DependsOn", которые используются в атрибутах DependsOnTargets по всему файлу Microsoft.Common.targets.Например, в целевом объекте Build содержится атрибут DependsOnTargets со значением "$(BuildDependsOn)".Рассмотрим этот пример:

<Target Name="Build" DependsOnTargets="$(BuildDependsOn)"/>

В этом фрагменте XML-кода указывается, что перед выполнением целевого объекта Build необходимо выполнить все целевые объекты, указанные в свойстве BuildDependsOn.Свойство BuildDependsOn определяется следующим образом:

<PropertyGroup>
    <BuildDependsOn>
        BeforeBuild;
        CoreBuild;
        AfterBuild
    </BuildDependsOn>
</PropertyGroup>

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

<PropertyGroup>
    <BuildDependsOn>
        MyCustomTarget1;
        $(BuildDependsOn);
        MyCustomTarget2
    </BuildDependsOn>
</PropertyGroup>

<Target Name="MyCustomTarget1">
    <Message Text="Running MyCustomTarget1..."/>
</Target>
<Target Name="MyCustomTarget2">
    <Message Text="Running MyCustomTarget2..."/>
</Target>

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

Переопределение свойства "DependsOn"

  1. В файле Microsoft.Common.targets выберите предопределенное свойство "DependsOn", которое нужно переопределить.В приведенной ниже таблице см. список наиболее часто переопределяемых свойств "DependsOn".

  2. Определите еще один экземпляр свойства или свойств в конце файла проекта.В новое свойство включите исходное свойство, например $(BuildDependsOn).

  3. Определите пользовательские целевые объекты до или после определения свойства.

  4. Создайте файл проекта.

ms366724.collapse_all(ru-ru,VS.110).gifЧасто переопределяемые свойства "DependsOn"

Имя свойства

Описание

BuildDependsOn

Свойство следует переопределить, если требуется вставить пользовательские целевые объекты до или после всего процесса построения.

CleanDependsOn

Свойство следует переопределить, если требуется убрать выходной файл из настраиваемого процесса построения.

CompileDependsOn

Свойство следует переопределить, если требуется вставить пользовательские процессы до или после этапа компиляции.

См. также

Ссылки

Файлы Targets в MSBuild

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

Интеграция Visual Studio (MSBuild)

Другие ресурсы

Основные возможности MSBuild