我在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
这样的东西,并且它总是被打成一个单一论点。这让我相信这不是一些引用蠢事。
如果我从提示符中运行这个完全相同的程序,它可以完美地运行。有人,请帮助我消除这种疯狂。
答案 0 :(得分:7)
在处理另一个项目时,我实际上设法复制了您的问题。我将多个args传递给powershell脚本,发现它们被视为单个参数。谷歌搜索发现此链接
在第一个参数的末尾放置一个空格的解决方案,即在你的例子中它将是
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启动。
所以这些参数肯定是为我单独发送的。
你能尝试同样的测试来看看你得到的行为吗?