2010-03-23 5 views
2

J'ai une application qui est supposée aider mon projet en termes de gestion des événements avant et après la construction. J'utilise ndesk.options pour l'analyse des arguments en ligne de commande. Ce qui m'a donné des résultats bizarres lorsque mon chemin de projet contient des espaces. Je pensais que c'était la faute de ndesk.options mais je suppose que ma propre application est à blâmer. J'appelle ma demande comme un événement post-construit comme ceci:Espaces et barres obliques inverses dans les événements de construction Visual Studio

build.exe --in="$(ProjectDir)" --out="c:\out\" 

Un foreach simple sur args [] affiche les éléments suivants:

--in=c:\my project" --out=c:\out" 

Ce qui est arrivé est que le dernier "dans chaque paramètre a été traité . comme si elle était échappé ainsi la barre oblique inverse de fuite a été enlevé et l'ensemble est traité comme un seul argument

maintenant, je pensais que j'étais intelligent en échappant à tout simplement le premier "aussi bien, comme suit:..

build.exe --in=\"$(ProjectDir)" --out=\"c:\out\" 

Dans ce cas, les args résultant [] ressemblent à ceci:

--path="c:\my 
project" 
--out="c:\out" 

La barre oblique inverse dans les paramètres est encore avalés et le premier paramètre est maintenant séparés. Passer ces args [] à ndesk.options produira alors des résultats erronés.

Quelle devrait être la bonne ligne de commande pour que les éléments corrects se retrouvent dans les emplacements args [] corrects? Alternativement, comment est-on censé analyser les arguments de ligne de commande comme ceux-ci avec ou sans ndesk.options? Toute suggestion est la bienvenue.

Merci à l'avance

Répondre

7

Avez-vous essayé d'échapper à la dernière barre oblique inverse?

build.exe --in="$(ProjectDir)\" --out="c:\out\\" 

Cela fonctionne probablement, aussi longtemps que le ProjectDir se termine par \, qui devrait être given.
Ceci est juste une idée, mais je ne lui donne pas un essai

EDIT:
J'ai trouvé un comment qui suggère de laisser la fuite "

+0

Cela, en effet, fonctionne comme un charme. Et là je pensais avoir essayé toutes les combinaisons. Merci beaucoup :) –

1

J'ai effectivement utilisé « » pour résoudre ce même problème:

build.exe --in="$(ProjectDir)." --out="c:\out\." 

principalement parce que sinon il pourrait ressembler à vous essayez d'échapper à la deuxième citation ... que vous n'êtes pas, vous échapper à la \ finale (ce qui est caché). J'ai également ajouté un REM dans la commande postbuild décrivant pourquoi je l'ai fait.

Questions connexes