我正在尝试执行批处理文件以在构建之后移动一堆文件,因此我创建了一个类似于此的构建后事件:
$(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提供的这种相当恼人的“帮助”?
答案 0 :(得分:6)
再创建两个批处理文件,只使用不同的参数执行第一个批处理文件。
<强> CopyPlugins-debug.bat 强>
Call CopyPlugins.bat debug
<强> CopyPlugins-release.bat 强>
Call CopyPlugins.bat release
在VS后期制作活动中
"$(ProjectDir)CopyPlugins-$(ConfigurationName).bat"
答案 1 :(得分:0)
如果您正在尝试进行复杂的构建后复制,则可能需要查看MSBuild Community Tasks项目。它有一个包装RoboCopy.exe的任务,这可能是一种更简洁的方式来完成你的任务。
通常我会创建一个单独的“构建”项目,该项目为空,除了执行前/后构建步骤之外什么都不做。它运作得很好。
答案 2 :(得分:0)
我认为您可能只需要在批处理脚本的路径周围引用,即您的构建后事件应该是:
"$(ProjectDir)CopyPlugins.bat" $(ConfigurationName)
这对我来说是一个位于路径中有空格的目录中的C#项目。
答案 3 :(得分:0)
只需按此键入
即可d:\foo\bar\myMainScript.bat "$(MY_VSPROPS_MACRO_VAR_00)"
这对我有用。不要使用CALL
函数来调用批处理文件!!!。
将所有参数传递到主批处理文件中并处理内部事物。 如果要调用其他批次或批次集,请不要在后期构建事件中调用它们,只需从主批处理文件中调用其他批处理文件。