2012-03-05 117 views
5

在MSBuild PreBuildEvent/PostBuildEvent事件期間,諸如$(TargetPath)和!(TargetPath)之類的屬性引用之間有什麼區別?我發現,他們在某些情況下,不同的工作,但我找不到窗體上的任何文件MSBuild屬性參考

http://msdn.microsoft.com/en-us/library/bb383819.aspx 這是最接近我似乎能夠找到

例「(!」。

<Target Name="BeforeBuild"> 
    <CreateProperty Value="NewValue"> 
    <Output TaskParameter="Value" PropertyName="TargetPath" /> 
    </CreateProperty> 
</Target> 

<PropertyGroup> 
    <PreBuildEvent> 
echo $(TargetPath) 
echo !(TargetPath) 
    </PreBuildEvent> 
</PropertyGroup> 

會響應原TARGETPATH然後回聲「的NewValue」。然而,這不是我所定義的其他屬性的作用。

任何幫助,非常感謝!

+1

有趣。你能發佈一個完整的proj文件展現這種行爲嗎?我試圖通過擴展示例「ConsoleApplication1.csproj」來重現它,但不能。 'echo!(TargetPath)'只是打印「!(TargetPath)」。 – 2012-03-05 06:49:17

+0

如果沒有文件記錄,你根本不應該使用它。 – 2012-03-05 06:54:42

+2

我在思考和「研究」這件事。它看起來像「!(」對於MSBuild來說是有意義的,除了純文本,當然是用作條件屬性中的「not-operator」。例如:'Condition =「!('$( foo)'=='1')「'這是否可能,您是否使用了一些自定義工具,預處理或類似將」!(TargetPath)「解釋爲其他內容然後是純文本? – 2012-03-06 08:11:39

回答

1

剛剛重寫了我們的構建過程,我可以誠實地說我從未使用過!引用任何東西,所有我曾經使用過的這個字符是在布爾運算符中說「NOT」。

事實上,我無法在文檔中的任何位置找到此用法或重現您所描述的行爲。

我強烈懷疑這是無效的/受支持的語法來引用任何東西。