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

Можем ли мы иметь что-то вроде этого:

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.


person tesicg    schedule 30.09.2013    source источник


Ответы (2)


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

Так изменить

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, а закрывающую скобку «)» — в той же строке, что и последняя команда в блоке.

person Davor Zlotrg    schedule 30.09.2013

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

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

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

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

person Joe    schedule 30.09.2013