2010-08-22 56 views
2

我试图执行一个批处理文件,所以我创建了一个看起来像这样一个生成后事件生成后向左右移动一堆文件:VS2008后生成事件的批处理文件

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

回答

6

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

CopyPlugins-debug.bat Call CopyPlugins.bat debug

CopyPlugins-release.bat Call CopyPlugins.bat release

而在VS生成后事件 "$(ProjectDir)CopyPlugins-$(ConfigurationName).bat"

+0

这看起来像我们能做的最好的... 这将是一个很好的IDE选项来关闭自动引用。我们是开发人员,我们足够聪明(通常)来确定我们何时做,不需要它。 – kdmurray 2010-08-22 09:45:07

0

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

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

+0

我一直希望不会仅仅为了在构建之后复制几个程序集。 – kdmurray 2010-08-22 06:03:51

0

我想你可能只需要路径批处理脚本各地的报价,即你的生成后事件应该是:

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

这为我工作所在的目录中有空格的C#项目在它的道路上。

+0

是的,试过了。不幸的是它在这里不起作用。我最终与VS2008试图执行: '“”C:\ <批处理路径> \ CopyPlugins.bat“调试”' 这只是没有帮助任何人。 – kdmurray 2010-08-22 06:20:52

+0

您正在使用哪种项目类型? C#? C++? – 2010-08-22 06:22:19

+0

C# - 但它在构建事件,所以我猜它应该是大多数项目类型相同。 – kdmurray 2010-08-22 09:45:46

0

只需键入像这样

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

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

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

相关问题