Visual Studio的后置构建不喜欢我的条件语句

3
我有一个后置构建条件,看起来像这样:

if $(ConfigurationName)==Release
(
    echo Update $(TargetName) to be non conflicting
    "$(SolutionDir)ILMerge\RummageTypeRenamer.exe" -f XamlGeneratedNamespace.GeneratedInternalTypeHelper -t XamlGeneratedNamespace.GeneratedInternalTypeHelper$(TargetName) $(TargetName).dll
    del $(TargetName).dll
    ren $(TargetName).Runmage.dll $(TargetName).dll
)

如果我去掉条件和括号,这个程序可以正常运行。但是如果按照现在的方式运行,就会出现以下错误:

命令语法不正确。

整个语句会被打印出来,条件看起来也很好:

if Release==Release

为什么Visual Studio不喜欢我的条件语句呢?

批处理期望括号与“IF”在同一行上。 - jeb
(+1) 为了展示如何在 post-build 中使用 RummageTypeRenamer :)。我知道这超出了主题的范围,但人们仍然可以通过“RummageTypeRenamer post-build”搜索字符串进行搜索。为什么你只需要在 Release 模式下使用这个程序集?为什么不是 Debug 模式?如果你想要,我可以提出一个单独的问题并在这里通知。谢谢。 - Andrey K.
@AndreyK. - 很抱歉我不记得为什么需要这个了。 - Vaccano
2个回答

2

在这里找到了解决方案:如何仅为调试版本运行Visual Studio后生成事件(请参见此评论:我发现整个命令需要在一行上,否则您将获得“退出代码255”)

因此,您的后生成应该如下所示:

    if $(ConfigurationName)==Release goto _release

    goto _exit

    :_release

    echo Update $(TargetName) to be non conflicting
    "$(SolutionDir)ILMerge\RummageTypeRenamer.exe" -f XamlGeneratedNamespace.GeneratedInternalTypeHelper -t XamlGeneratedNamespace.GeneratedInternalTypeHelper$(TargetName) $(TargetName).dll
    del $(TargetName).dll
    ren $(TargetName).Runmage.dll $(TargetName).dll

    :_exit

0

尝试使用K&R风格的括号:

if $(ConfigurationName)==Release (
    echo Update $(TargetName) to be non conflicting
    ...
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接