События сборки, не учитывающие несколько аргументов командной строки - PullRequest
1 голос
/ 20 июля 2011

У меня есть следующее событие после сборки в проекте C # .NET 4.0 в Visual Studio 2010:

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 ]

7 голосов
/ 02 августа 2011

Во время работы над другим проектом мне действительно удалось воспроизвести вашу проблему. Я передавал несколько аргументов скрипту 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 аргументов, вам нужно будет добавить пробел в конце каждого, кроме последнего.

НТН

3 голосов
/ 07 октября 2011

Я столкнулся с той же проблемой - если аргумент расширяется до чего-то, что заканчивается обратной косой чертой, я думаю, что вторая кавычка экранируется и рассматривается как символ кавычки в первом аргументе.

Использование "$ (OutDir) \" мне помогло.

0 голосов
/ 21 июля 2011

Я вообще не понимаю этого поведения.

Я создал событие после сборки

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.

Так что параметры для меня определенно отправляются отдельно.

Можете ли вы попробовать этот же тест, чтобы увидеть, какое поведение вы получаете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...