20

我们可以有这样的东西:

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。

4

2 回答 2

35

您可以拥有任意数量的条件语句,只需将它们用新行分隔并丢失 else

所以改变

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

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

它会编译并运行得很好

注意:这些命令将像 DOS 批处理文件一样逐行解释,因此将左括号“(”与 if 语句放在同一行,右括号“)”放在与块中的最后一个命令相同的行。

于 2013-09-30T07:56:11.467 回答
7

如果您的构建后逻辑变得复杂,我建议将其移至外部文件。例如,以下构建后事件:

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

在项目目录中执行批处理文件 PostBuild.cmd,将 $(ConfigurationName) 作为参数传递。您还可以传递其他参数,例如 $(TargetPath)。

然后,您可以实现任何您想要的内容,包括多个 if 语句,更重要的是,在不运行 Visual Studio 构建的情况下对其进行调试。

于 2013-09-30T07:45:32.897 回答