2015-08-25 54 views
1

与Visual Studio战斗以在预构建步骤中正确地逃避美元符号($)。目标是提供一个变量名称作为一个litteral。 VS不应该尝试处理变量名称。如何在预构建步骤中逃离美元符号

documentation指出应该使用%xx(其中xx是字符的十六进制值)。

我已经试过如下:

%24(var.Data.WebHost.ProjectDir) 

但结果是

4(var.Data.WebHost.ProjectDir) 

而不是

$(var.Data.WebHost.ProjectDir) 

什么我错在这里做什么?

更新1:正确的语法是将$符号放在双引号之间。

"$"(var.Data.WebHost.ProjectDir) 

就是答案。

+0

问题是,你得到了你所要求的,MSBuild确实没有处理变量名。所以%24(yadayada)被复制到prebuild事件中。这是由命令处理器Cmd.exe执行的。其中特别处理%2,它将其替换为第二个命令参数。没有。您*确实希望MSBuild扩展该变量。 –

回答

1

作为使用文档中的方法是做一个替代:

%2524(var.Data.WebHost.ProjectDir) 

%25确实的%,而其余24将被追加,形成%24,从而转化为$(Whatever)在输出代码。

"$"方法并没有为我工作,我在写的OSX兼容后生成事件(单声道5),所以我需要的东西是这样的:

if [ "$(uname)" == "Darwin" ]; then (...) 

和输出,""$"(uname)"没不为我工作。

我希望这个迟到的答案对未来的任何人都有帮助(因为似乎没有,到目前为止,还没有在google上关于这个问题)。