Oliver Salzburg
Oliver Salzburg

Reputation: 22099

Spaces and backslashes in Visual Studio build events

I have an application that is supposed to aid my project in terms of pre- and post-build event handling. I'm using ndesk.options for command line argument parsing. Which gave me weird results when my project path contains spaces. I thought this was the fault of ndesk.options but I guess my own application is to blame. I call my application as a post-built event like so:

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

A simple foreach over args[] displays the following:

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

What happened is that the last " in each parameter was treated as if it was escaped. Thus the trailing backslash was removed. And the whole thing is treated as a single argument.

Now I thought I was being smart by simply escaping the first " as well, like so:

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

In that case the resulting args[] look like this:

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

The trailing backslash in the parameters is still swallowed and the first parameter is now split up.

Passing this args[] to ndesk.options will then yield wrong results.

How should the right command line look so that the correct elements end up in the correct args[] slots? Alternatively, how is one supposed to parse command line arguments like these with or without ndesk.options? Any suggestion is welcome.

Thanks in advance

Upvotes: 3

Views: 5683

Answers (2)

G Greene
G Greene

Reputation: 65

I actually used "." to solve this same problem:

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

primarily because otherwise it might look like you are trying to escape the second quote...which you're not, you're escaping the final \ (which is hidden). I also added a REM in the postbuild command describing why I did that.

Upvotes: 2

tanascius
tanascius

Reputation: 53964

Did you try to escape the last backslash?

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

This works probably only, as long as the ProjectDir ends in \, which should be given.
This is just an idea, but I did not give it a try

EDIT:
I found a comment which suggests to leave out the trailing "

Upvotes: 8

Related Questions