In WiX, property is referenced by enclosing its name in square blanket. For example, “[foobar]”. When a text (which we have no control over) is enclosed in blankets but is not a property, how do we escape it? This is not a WiX problem but a MSI method of deducing whether a value is a property. After searching the web with no answer, I decide to set the opening and closing blanket as properties(See below).
<Property Id="OpenBracket" Value="[" /> <Property Id="CloseBracket" Value="]" />
So the value becomes “[OpenBracket]foobar[CloseBracket]” which is deduced to “[foobar]” during installation. It is a silly workaround but it works perfectly for me.