2

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

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

4

4 回答 4

6

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

CopyPlugins-debug.bat Call CopyPlugins.bat debug

CopyPlugins-release.bat Call CopyPlugins.bat release

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

于 2010-08-22T06:27:25.233 回答
0

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

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

于 2010-08-22T06:01:39.517 回答
0

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

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

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

于 2010-08-22T06:17:23.280 回答
0

像这样输入

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

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

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

于 2012-08-29T11:22:59.793 回答