我正在尝试执行批处理文件以在构建后移动一堆文件,因此我创建了一个看起来像这样的后构建事件:

$(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提供的这种烦人的“帮助”有什么办法?

有帮助吗?

解决方案

创建两个仅通过不同参数执行第一个的批次文件。

copyplugins-debug.bat Call CopyPlugins.bat debug

copyplugins-release.bat Call CopyPlugins.bat release

在与后构建活动中 "$(ProjectDir)CopyPlugins-$(ConfigurationName).bat"

其他提示

如果您想进行复杂的后建造复制,那么可能值得一看 MSBUILD社区任务 项目。它具有包装Robocopy.exe的任务,这可能是完成任务的一种更干净的方法。

通常,我制作一个单独的“构建”项目,该项目是空的,除了执行前/邮政构建步骤外,什么都不做。它运行良好。

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

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

这对我来说是一个在一个目录中的C#项目,其路径上有空间。

只需这样的键

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

这对我有用。不要使用 CALL 调用批处理文件的功能!!!

将所有参数传递到主批处理文件中,然后处理内部的事物。如果您有其他批处理或一组要调用的批次,请不要在邮政构建事件中调用它们,只需从主批处理文件调用其他批处理文件即可。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top