Запускать кроме DefaultTarget для конфигурации проекта в Visual Studio 2010

В моем csproj есть цель MSBuild для копирования файлов и папок моего веб-приложения на целевой путь после сборки.

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder">
...

Если я вызываю MSBuild через командную строку с целью «PublishToFileSystem», все работает нормально.

Но теперь я хочу «использовать» эту цель также для специальной конфигурации в Visual Studio (например, Release, Debug, ...).

Как я могу назначить конфигурацию другой цели, кроме DefaultTarget "Build", установленной в проекте с помощью DefaultTargets:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

Спасибо Конрад


person Konrad    schedule 21.12.2011    source источник


Ответы (3)


Попробуйте использовать цель AfterBuild вместо PublishToFileSystem:

<Target Name="AfterBuild" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder">

или проверьте Переопределение предопределенных целей в MSDN

person Ludwo    schedule 21.12.2011
comment
Используя DependsOnTargets в AfterBuild-Target, я получаю ошибку циклической зависимости в AfterBuild. - person Konrad; 21.12.2011
comment
Цель PipelinePreDeployCopyAllFilesToOneFolder зависит от цели AfterBuild? - person Ludwo; 22.12.2011
comment
Возможно, какая-то подзадача в PipelinePreDeployCopyAllFilesToOneFolder - это сборка, которая снова вызывает AfterBuild. - person Konrad; 22.12.2011

Если вы хотите сделать это для конкретной конфигурации решения и страдаете от зависимостей Ciruclar, как и я, самое простое, что я мог придумать, - это написать свой собственный Target для использования в качестве цели по умолчанию. Эта цель запускает другие цели в зависимости от условия в конфигурации.

<Target Name="CustomBuild">
  <CallTarget Targets="SignAndroidPackage" Condition="'$(Configuration)' == 'UITest'"/>
  <CallTarget Targets="Build" Condition="'$(Configuration)' != 'UITest'"/>
</Target>

А затем просто измените цель по умолчанию в верхней части определения проекта на эту цель CustomBuild.

<Project DefaultTargets="CustomBuild" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
person Ferry de Boer    schedule 02.03.2017

Вот подход, который может удовлетворить ваши потребности: запустите настраиваемую цель msbuild из VisualStudio

(это уловка № 78 в книге Уловки MSBuild)

person Brian Kretzler    schedule 21.12.2011
comment
Хммм ... надеялся, что смогу определить такую ​​конфигурацию, как ReleaseAndDeploy, которую я также могу использовать в качестве конфигурации на TFS-Build-Server без каких-либо дополнительных изменений. Дополнения в моих VS-Tools не кажутся однозначным решением. Могу ли я определить другую цель, кроме DefaultTarget, только для одной из моих конфигураций? - person Konrad; 21.12.2011
comment
Конечно, конфигурации можно использовать таким образом. Просто подключите цели к сборке и используйте Condition = '$ (Configuration)' == 'ReleaseAndDeploy'. Однако я никогда не использую такие конфигурации. Я предпочитаю запускать сборки из командной строки, а в последнее время - из Powershell. Для меня IDE - хороший пользовательский интерфейс, но не очень помогает с SDLC, поскольку все привязано к решению, а решения - довольно слабая основа, ну, на самом деле, для чего угодно. - person Brian Kretzler; 24.12.2011