C# Visual Studio生成事件中的空格和反斜杠
我有一个应用程序,它应该在构建前和构建后事件处理方面帮助我的项目。我正在使用ndesk.options进行命令行参数解析。当我的项目路径包含空格时,这给了我奇怪的结果。我以为这是ndesk.options的错,但我想应该怪我自己的应用程序。我将我的应用程序称为后期构建事件,如下所示:C# Visual Studio生成事件中的空格和反斜杠,c#,visual-studio,post-build,C#,Visual Studio,Post Build,我有一个应用程序,它应该在构建前和构建后事件处理方面帮助我的项目。我正在使用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[]上的简单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)?欢迎提出任何建议
提前感谢您是否试图避开最后一个反斜杠
build.exe --in="$(ProjectDir)\" --out="c:\out\\"
这可能只起作用,只要ProjectDir
以\
结尾,应该是。这只是一个想法,但我没有尝试 编辑:
我找到了一个建议省略尾随的
“
我实际使用的“.”来解决同样的问题:
build.exe --in="$(ProjectDir)." --out="c:\out\."
主要是因为,否则它可能看起来像是你在逃避第二句话……你不是,你是在逃避最后一句话(隐藏着)。
我还在postbuild命令中添加了一个REM,描述了我为什么这么做。这确实很有魅力。在这里,我想我尝试了各种组合。非常感谢:)