VS2010: Может ли быть несколько, если в событии после сборки?

У нас есть что-то вроде этого:

if "Debug"=="$(ConfigurationName)"
(
  goto :nocopy
)
else if "Release"=="$(ConfigurationName)"
(
  del "$(TargetPath).config"
  copy "$(ProjectDir)\App.Release.config" "$(TargetPath).config"
)
else if "ReleaseBeta"=="$(ConfigurationName)"
(
  del "$(TargetPath).config"
  copy "$(ProjectDir)\App.ReleaseBeta.config" "$(TargetPath).config"
)
else if "ReleaseProduction"=="$(ConfigurationName)"
(
  del "$(TargetPath).config"
  copy "$(ProjectDir)\App.ReleaseProduction.config" "$(TargetPath).config"
)
    :nocopy

Я пробовал, но он не работает. Код ошибки - 255.

Ответы

Ответ 1

У вас может быть столько условных операторов, сколько хотите, просто отделите их по новой строке и потеряйте еще

Итак, измените

if "Debug"=="$(ConfigurationName)"
(
  goto :nocopy
)
else if...

To

if "Debug" == "$(ConfigurationName)" (goto :nocopy)
if "Release" ==" $(ConfigurationName)" (
    del "$(TargetPath).config"
    copy "$(ProjectDir)\App.Release.config" "$(TargetPath).config" )
if ...

и он будет компилироваться и работать просто отлично

Примечание. Команды будут интерпретироваться по очереди так же, как пакетный файл DOS, поэтому важно разместить открывающую скобку "(" в той же строке, что и оператор if и закрывающая скобка ")" в той же строке, что и последняя команда в блоке.

Ответ 2

Если ваша логика пост-сборки усложняется, я бы предложил переместить ее во внешний файл. Например, следующее событие после сборки:

CALL "$(ProjectDir)PostBuild.cmd" $(ConfigurationName)

выполняет командный файл PostBuild.cmd в каталоге проекта, передавая $(ConfigurationName) в качестве параметра. Вы также можете передать другие параметры, такие как $(TargetPath).

Затем вы можете реализовать все, что хотите, включая несколько операторов if и, что более важно, отлаживать его без запуска сборки Visual Studio.