构建不遵守多个命令行参数的事件

时间:2011-07-20 00:17:22

标签: visual-studio visual-studio-2010

我在Visual Studio 2010中的C#.NET 4.0项目中有以下作为后期构建事件:

call "$(SolutionDir)Publish\Publish.exe" "$(TargetDir)" "\\lithium\c\Photon"
call "$(SolutionDir)RemoteControl\RemoteControl.exe" start

问题是,当执行Publish.exe时,只传递一个命令行参数,其中包含以下值:

C:\Users\...\bin\Release" \\lithium\c\Photon

注意:我用省略号替换了一些文件夹,否则这是确切的值

无论出于何种原因,它将两个参数合并为一个,并且非常奇怪地解析引号。我已经调试了一段时间了,我已经尝试了没有call的相对目录Publish.exe,只有call "$(SolutionDir)Publish\Publish.exe" hello world这样的东西,并且它总是被打成一个单一论点。这让我相信这不是一些引用蠢事。

如果我从提示符中运行这个完全相同的程序,它可以完美地运行。有人,请帮助我消除这种疯狂。

3 个答案:

答案 0 :(得分:7)

在处理另一个项目时,我实际上设法复制了您的问题。我将多个args传递给powershell脚本,发现它们被视为单个参数。谷歌搜索发现此链接

http://davidfrette.wordpress.com/2011/01/20/creating-powershell-pre-build-and-post-build-events-for-visual-studio-projects/

在第一个参数的末尾放置一个空格的解决方案,即在你的例子中它将是

call "$(SolutionDir)Publish\Publish.exe" "$(TargetDir) " "\\lithium\c\Photon"

这对我有用,所以希望能解决你的问题。

如果你有超过2个args,那么除了最后一个之外,你需要在每个args的末尾添加一个空格。

HTH

答案 1 :(得分:3)

我遇到了同样的问题 - 如果参数扩展为以反斜杠结尾的内容,我认为第二个引用被转义并被视为第一个参数中的引号字符。

使用“$(OutDir)\”为我工作。

答案 2 :(得分:0)

我根本没有这种行为。

我创建了

的后期构建事件
call "$(SolutionDir)test.cmd" "$(SolutionDir)a.txt" "$(SolutionDir)b.txt"

test.cmd包含:

if '%1' == '' GOTO END
notepad.exe %1
if '%2' == '' GOTO END
notepad.exe %2
:END

a.txt& b.txt只有“这是文件A”& “这是文件B”

当我进行构建时,Notepad会以a.txt启动,当我关闭它时,Notepad会以b.txt启动。

所以这些参数肯定是为我单独发送的。

你能尝试同样的测试来看看你得到的行为吗?