【问题标题】:VS2008 post-build event batch fileVS2008 构建后事件批处理文件
【发布时间】:2012-08-29 19:22:59
【问题描述】:

我正在尝试执行一个批处理文件以在构建后移动一堆文件,因此我创建了一个如下所示的构建后事件:

$(ProjectDir)CopyPlugins.bat $(ConfigurationName)

问题是,当 Visual Studio 尝试运行事件时,我收到进程 exited with code 9009 的错误

问题似乎是VS将整行放在引号中,以便它运行的命令是:

"C:\Users\kdmurray\Visual Studio 2008\Projects\Runner\Runner\CopyPlugins.bat Debug"

当然,我打算做的是一个非常微妙的变化,改变右引号的位置。

"C:\Users\kdmurray\Visual Studio 2008\Projects\Runner\Runner\CopyPlugins.bat" Debug

有什么办法可以解决 VS 提供的这个相当烦人的“帮助”吗?

【问题讨论】:

    标签: visual-studio batch-file post-build-event


    【解决方案1】:

    再创建两个批处理文件,它们只使用不同的参数执行第一个。

    CopyPlugins-debug.bat Call CopyPlugins.bat debug

    CopyPlugins-release.bat Call CopyPlugins.bat release

    在 VS 构建后事件中 "$(ProjectDir)CopyPlugins-$(ConfigurationName).bat"

    【讨论】:

    • 这看起来是我们能做的最好的事情了……如果有一个 IDE 选项来关闭自动报价,那就太好了。我们是开发人员,我们(通常)足够聪明,可以弄清楚我们什么时候需要它,什么时候不需要它。
    【解决方案2】:

    如果您尝试进行复杂的构建后复制,则可能值得查看MSBuild Community Tasks 项目。它有一个包含 RoboCopy.exe 的任务,这可能是完成任务的一种更简洁的方式。

    通常我会创建一个单独的“构建”项目,该项目是空的,除了执行构建前/构建后步骤之外什么都不做。效果很好。

    【讨论】:

    • 我希望它不会只是在构建后复制几个程序集。
    【解决方案3】:

    我认为您可能只需要在批处理脚本的路径周围加上引号,即您的构建后事件应该是:

    "$(ProjectDir)CopyPlugins.bat" $(ConfigurationName)
    

    这对我来说适用于位于路径中有空格的目录中的 C# 项目。

    【讨论】:

    • 是的,试过了。不幸的是,它在这里不起作用。我最终尝试执行 VS2008:""C:\<path to batch>\CopyPlugins.bat" Debug" 这对任何人都没有帮助。
    • C#——但它在构建事件中,所以我猜它对于大多数项目类型应该是相同的。
    【解决方案4】:

    就这样输入

    d:\foo\bar\myMainScript.bat "$(MY_VSPROPS_MACRO_VAR_00)"
    

    这对我有用。不要使用CALL函数调用批处理文件!!!。

    将所有参数传递到主批处理文件并处理里面的东西。 如果您有其他批处理或一组批处理要调用,请不要在构建后事件中调用它们,只需从主批处理文件中调用其他批处理文件即可。

    【讨论】:

      猜你喜欢
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      相关资源
      最近更新 更多