Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
Modularization RegEx in Row.cs incorrectly identifies some property names as keywords in Component Condition #4513
In AutoCAD, we use a property called ORIGSTANDALONENETWORKTYPE. This property is used by a custom action delivered by licensing group, and cannot be changed.
When we broke out some ACAD specific licensing into separate MSMs (to share with ACAD vertical products), we noticed a problem with the Modularization code. This property should not be Modularized as we add the SuppressModularization attribute. This works everywhere except when the property is used as part of the Component Condition:
ACADLOCKTYPE = "2" AND ORIGSTANDALONENETWORKTYPE <> "3" AND NIWSELECTION = 1
ACADLOCKTYPE = "2" AND ORIGSTANDALONENETWORKTYPE.E26FEF92_AA43_4038_AD07_6BF1C4B34096 <> "3" AND NIWSELECTION = 1
After debugging the Wix Toolset, it appears the regular expression in Row.cs detects the characters "OR" in the property name as a keyword, and therefore only sees the property name as "IGSTANDALONENETWORKTYPE"
This can be confirmed using an online RegExp tool, like http://regexhero.net/tester/
The workaround is to create another property called "IGSTANDALONENETWORKTYPE" and suppress modularizartion on this. This will suppress the modularization of the Component Condition, while the real property suppresses modularization everywhere else.
Looking at the source code, this defect also affects Wix 3.9.