Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Visual Studio生成事件中的空格和反斜杠_C#_Visual Studio_Post Build - Fatal编程技术网

C# Visual Studio生成事件中的空格和反斜杠

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"

我有一个应用程序,它应该在构建前和构建后事件处理方面帮助我的项目。我正在使用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)?欢迎提出任何建议


提前感谢

您是否试图避开最后一个反斜杠

build.exe --in="$(ProjectDir)\" --out="c:\out\\"
这可能只起作用,只要
ProjectDir
\
结尾,应该是。
这只是一个想法,但我没有尝试

编辑:
我找到了一个建议省略尾随的

我实际使用的“.”来解决同样的问题:

build.exe --in="$(ProjectDir)." --out="c:\out\."
主要是因为,否则它可能看起来像是你在逃避第二句话……你不是,你是在逃避最后一句话(隐藏着)。
我还在postbuild命令中添加了一个REM,描述了我为什么这么做。

这确实很有魅力。在这里,我想我尝试了各种组合。非常感谢:)