aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core/Compiler_2.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Core/Compiler_2.cs')
-rw-r--r--src/WixToolset.Core/Compiler_2.cs43
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>