2011-07-20 86 views
1

我已在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,它總是被砸成一個參數。這使我相信這不是一些引用tomfoolery。

如果我從提示符運行這個完全相同的程序,它的工作原理是完美的。有人請幫助我切斷這種瘋狂。

回答

7

在處理另一個項目時,我實際上設法複製了您的問題。我將多個參數傳遞給一個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" 

這爲我工作,所以希望它會解決你的問題。

如果你有兩個以上的參數,那麼你需要在每個參數的末尾添加一個空格,除了最後一個。

HTH

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只是 「這是文件中的」 &「這是文件B「

當我做生成時,記事本啓動a.txt,當我關閉它然後記事本啓動與b.txt。

所以參數肯定是分開發送給我的。

你可以試試這個測試來看看你得到了什麼樣的行爲嗎?

+0

我今天回家的時候,謝謝! –

3

我打的是同樣的問題 - 如果參數擴展出來的東西在一個反斜槓從而結束,我認爲第二個引號被轉義,並作爲第一個參數內的引號字符處理。

使用「$(OutDir)\」爲我工作。