2015-08-25 80 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上關於這個問題)。