3

У меня есть цель MSBuild в моем csproj для копирования файлов и папок моего веб-приложения на целевой путь после сборки.Запуск за исключением конфигурации DefaultTarget для конфигурации проекта в Visual Studio 2010

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

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

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

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

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

Спасибо, Konrad

ответ

4

Try использовать цель AfterBuild вместо PublishToFileSystem:

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

или проверить Overriding Predefined Targets on MSDN

+0

Использование DependOnTargets в AfterBuild-Target, я получаю ошибку круговой зависимости в AfterBuild. – Konrad

+0

PipelinePreDeployCopyAllFilesToOneFolder target зависит от цели AfterBuild? – Ludwo

+0

Возможно, какая-то подзадача в PipelinePreDeployCopyAllFilesToOneFolder - это сборка, которая снова вызывает AfterBuild. – Konrad

0

Вот такой подход, который может удовлетворить ваши потребности: run a custom msbuild target from VisualStudio

(это Трюк 78 в книге MSBuild Trickery)

+0

Хммм ... я надеялся, что смогу определить такую ​​конфигурацию, как «ReleaseAndDeploy», которую я также могу использовать в качестве конфигурации на TFS-Build-Server без каких-либо дополнительных изменений. AddOns в моих VS-инструментах, похоже, не является ясным решением. Не могу ли я определить другую цель, кроме DefaultTarget, только для одной из моих конфигураций? – Konrad

+0

Несомненно, конфигурации * могут * использоваться таким образом. Просто проводьте цели в Build и используйте Condition = "'$ (Конфигурация)' == 'ReleaseAndDeploy'. Однако я никогда не использую такие конфигурации. Я предпочитаю управлять сборками из командной строки и в последнее время много Powershell. Для меня среда IDE - хороший пользовательский интерфейс, но не очень помогает SDLC, так как все привязано к решению, а решения - довольно слабая основа для того, что угодно. –

0

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

<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"> 

 Смежные вопросы

  • Нет связанных вопросов^_^