3

ビルド前とビルド後のイベント処理の観点からプロジェクトを支援することになっているアプリケーションがあります。コマンドライン引数の解析にndesk.optionsを使用しています。プロジェクトパスにスペースが含まれていると、奇妙な結果になりました。これはndesk.optionsのせいだと思いましたが、私自身のアプリケーションが原因だと思います。私は自分のアプリケーションを次のようにビルド後のイベントと呼んでいます。

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

args[]上の単純なforeachは次を表示します。

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

何が起こったのかというと、各パラメーターの最後の "はエスケープされたかのように扱われました。したがって、末尾のバックスラッシュは削除されました。そして、すべてが単一の引数として扱われます。

今、私は最初の「」もエスケープするだけで賢いと思いました。

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

その場合、結果のargs[]は次のようになります。

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

パラメータの末尾の円記号は引き続き飲み込まれ、最初のパラメータが分割されます。

このargs[]をndesk.optionsに渡すと、間違った結果が生成されます。

正しい要素が正しいargs[]スロットに収まるように、正しいコマンドラインをどのように表示する必要がありますか?あるいは、ndesk.optionsの有無にかかわらず、これらのようなコマンドライン引数をどのように解析することになっていますか?どんな提案でも大歓迎です。

前もって感謝します

4

2 に答える 2

8

最後のバックスラッシュを回避しようとしましたか?

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

これは、ProjectDirで終わる限り、おそらくのみ機能し\ます。これは単なるアイデアですが、試してみませんでした

編集:私は末尾を省くことを示唆するコメント
を見つけました"

于 2010-03-23T22:34:20.510 に答える
2

私は実際に「。」を使用しました。この同じ問題を解決するには:

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

主に、2番目の引用符をエスケープしようとしているように見える可能性があるためです...そうではなく、最後の\(非表示)をエスケープしています。また、postbuildコマンドにREMを追加して、その理由を説明しました。

于 2016-11-28T16:36:03.867 に答える