diff options
Diffstat (limited to 'src/WixToolset.Core/Compiler_2.cs')
-rw-r--r-- | src/WixToolset.Core/Compiler_2.cs | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/src/WixToolset.Core/Compiler_2.cs b/src/WixToolset.Core/Compiler_2.cs index 9e2ddb5b..84961f9b 100644 --- a/src/WixToolset.Core/Compiler_2.cs +++ b/src/WixToolset.Core/Compiler_2.cs | |||
@@ -1964,18 +1964,15 @@ namespace WixToolset.Core | |||
1964 | { | 1964 | { |
1965 | switch (child.Name.LocalName) | 1965 | switch (child.Name.LocalName) |
1966 | { | 1966 | { |
1967 | case "MultiString": | ||
1967 | case "MultiStringValue": | 1968 | case "MultiStringValue": |
1968 | if (RegistryValueType.MultiString != valueType && null != value) | 1969 | if (RegistryValueType.MultiString != valueType && null != value) |
1969 | { | 1970 | { |
1970 | this.Core.Write(ErrorMessages.RegistryMultipleValuesWithoutMultiString(sourceLineNumbers, node.Name.LocalName, "Value", child.Name.LocalName, "Type")); | 1971 | this.Core.Write(ErrorMessages.RegistryMultipleValuesWithoutMultiString(sourceLineNumbers, node.Name.LocalName, "Value", child.Name.LocalName, "Type")); |
1971 | } | 1972 | } |
1972 | else if (null == value) | ||
1973 | { | ||
1974 | value = Common.GetInnerText(child); | ||
1975 | } | ||
1976 | else | 1973 | else |
1977 | { | 1974 | { |
1978 | value = String.Concat(value, "[~]", Common.GetInnerText(child)); | 1975 | value = this.ParseRegistryMultiStringElement(child, value); |
1979 | } | 1976 | } |
1980 | break; | 1977 | break; |
1981 | case "Permission": | 1978 | case "Permission": |
@@ -2069,6 +2066,42 @@ namespace WixToolset.Core | |||
2069 | return keyPath; | 2066 | return keyPath; |
2070 | } | 2067 | } |
2071 | 2068 | ||
2069 | private string ParseRegistryMultiStringElement(XElement node, string value) | ||
2070 | { | ||
2071 | var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
2072 | string multiStringValue = null; | ||
2073 | |||
2074 | foreach (var attrib in node.Attributes()) | ||
2075 | { | ||
2076 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || CompilerCore.WixNamespace == attrib.Name.Namespace) | ||
2077 | { | ||
2078 | switch (attrib.Name.LocalName) | ||
2079 | { | ||
2080 | case "Value": | ||
2081 | multiStringValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2082 | break; | ||
2083 | default: | ||
2084 | this.Core.UnexpectedAttribute(node, attrib); | ||
2085 | break; | ||
2086 | } | ||
2087 | } | ||
2088 | } | ||
2089 | |||
2090 | if (multiStringValue == null) | ||
2091 | { | ||
2092 | multiStringValue = Common.GetInnerText(node); | ||
2093 | } | ||
2094 | |||
2095 | if (multiStringValue == null) | ||
2096 | { | ||
2097 | this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value")); | ||
2098 | } | ||
2099 | |||
2100 | this.Core.ParseForExtensionElements(node); | ||
2101 | |||
2102 | return (null == value) ? multiStringValue : String.Concat(value, "[~]", multiStringValue); | ||
2103 | } | ||
2104 | |||
2072 | /// <summary> | 2105 | /// <summary> |
2073 | /// Parses a RemoveRegistryKey element. | 2106 | /// Parses a RemoveRegistryKey element. |
2074 | /// </summary> | 2107 | /// </summary> |