aboutsummaryrefslogtreecommitdiff
path: root/src/wixext
diff options
context:
space:
mode:
Diffstat (limited to 'src/wixext')
-rw-r--r--src/wixext/ComPlusCompiler.cs1079
-rw-r--r--src/wixext/ComPlusDecompiler.cs4
-rw-r--r--src/wixext/ComPlusErrors.cs72
-rw-r--r--src/wixext/ComPlusExtensionData.cs50
-rw-r--r--src/wixext/ComPlusExtensionFactory.cs18
-rw-r--r--src/wixext/ComPlusWarnings.cs31
-rw-r--r--src/wixext/ComPlusWindowsInstallerBackendBinderExtension.cs26
-rw-r--r--src/wixext/Tuples/ComPlusApplicationPropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusApplicationRolePropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusApplicationRoleTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusApplicationTuple.cs79
-rw-r--r--src/wixext/Tuples/ComPlusAssemblyDependencyTuple.cs55
-rw-r--r--src/wixext/Tuples/ComPlusAssemblyTuple.cs103
-rw-r--r--src/wixext/Tuples/ComPlusComponentPropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusComponentTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusGroupInApplicationRoleTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusGroupInPartitionRoleTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusInterfacePropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusInterfaceTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusMethodPropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusMethodTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusPartitionPropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusPartitionRoleTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusPartitionTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusPartitionUserTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusRoleForComponentTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusRoleForInterfaceTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusRoleForMethodTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusSubscriptionPropertyTuple.cs63
-rw-r--r--src/wixext/Tuples/ComPlusSubscriptionTuple.cs95
-rw-r--r--src/wixext/Tuples/ComPlusTupleDefinitions.cs135
-rw-r--r--src/wixext/Tuples/ComPlusUserInApplicationRoleTuple.cs71
-rw-r--r--src/wixext/Tuples/ComPlusUserInPartitionRoleTuple.cs71
-rw-r--r--src/wixext/WixComPlusExtension.csproj50
-rw-r--r--src/wixext/WixToolset.ComPlus.wixext.csproj33
-rw-r--r--src/wixext/WixToolset.ComPlus.wixext.targets11
-rw-r--r--src/wixext/messages.xml77
37 files changed, 2624 insertions, 713 deletions
diff --git a/src/wixext/ComPlusCompiler.cs b/src/wixext/ComPlusCompiler.cs
index 7f22c56b..4709eba9 100644
--- a/src/wixext/ComPlusCompiler.cs
+++ b/src/wixext/ComPlusCompiler.cs
@@ -1,32 +1,23 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 2
3namespace WixToolset.Extensions 3namespace WixToolset.ComPlus
4{ 4{
5 using System; 5 using System;
6 using System.Collections; 6 using System.Collections;
7 using System.Collections.Generic; 7 using System.Collections.Generic;
8 using System.Globalization; 8 using System.Globalization;
9 using System.Reflection; 9 using System.Text;
10 using System.Xml;
11 using System.Xml.Linq; 10 using System.Xml.Linq;
12 using System.Xml.Schema;
13 using WixToolset.Data; 11 using WixToolset.Data;
14 using WixToolset.Extensibility; 12 using WixToolset.Extensibility;
13 using WixToolset.Extensibility.Data;
15 14
16 /// <summary> 15 /// <summary>
17 /// The compiler for the WiX Toolset Internet Information Services Extension. 16 /// The compiler for the WiX Toolset COM+ Extension.
18 /// </summary> 17 /// </summary>
19 public sealed class ComPlusCompiler : CompilerExtension 18 public sealed class ComPlusCompiler : BaseCompilerExtension
20 { 19 {
21 /// <summary> 20 /// <summary>
22 /// Instantiate a new ComPlusCompiler.
23 /// </summary>
24 public ComPlusCompiler()
25 {
26 this.Namespace = "http://wixtoolset.org/schemas/v4/wxs/complus";
27 }
28
29 /// <summary>
30 /// </summary> 21 /// </summary>
31 /// <remarks></remarks> 22 /// <remarks></remarks>
32 public enum CpiAssemblyAttributes 23 public enum CpiAssemblyAttributes
@@ -37,6 +28,8 @@ namespace WixToolset.Extensions
37 RegisterInCommit = (1 << 3) 28 RegisterInCommit = (1 << 3)
38 } 29 }
39 30
31 public override XNamespace Namespace => "http://wixtoolset.org/schemas/v4/wxs/complus";
32
40 /// <summary> 33 /// <summary>
41 /// Processes an element for the Compiler. 34 /// Processes an element for the Compiler.
42 /// </summary> 35 /// </summary>
@@ -44,7 +37,7 @@ namespace WixToolset.Extensions
44 /// <param name="parentElement">Parent element of element to process.</param> 37 /// <param name="parentElement">Parent element of element to process.</param>
45 /// <param name="element">Element to process.</param> 38 /// <param name="element">Element to process.</param>
46 /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param> 39 /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param>
47 public override void ParseElement(XElement parentElement, XElement element, IDictionary<string, string> context) 40 public override void ParseElement(Intermediate intermediate, IntermediateSection section, XElement parentElement, XElement element, IDictionary<string, string> context)
48 { 41 {
49 switch (parentElement.Name.LocalName) 42 switch (parentElement.Name.LocalName)
50 { 43 {
@@ -56,49 +49,49 @@ namespace WixToolset.Extensions
56 switch (element.Name.LocalName) 49 switch (element.Name.LocalName)
57 { 50 {
58 case "ComPlusPartition": 51 case "ComPlusPartition":
59 this.ParseComPlusPartitionElement(element, componentId, win64); 52 this.ParseComPlusPartitionElement(intermediate, section, element, componentId, win64);
60 break; 53 break;
61 case "ComPlusPartitionRole": 54 case "ComPlusPartitionRole":
62 this.ParseComPlusPartitionRoleElement(element, componentId, null); 55 this.ParseComPlusPartitionRoleElement(intermediate, section, element, componentId, null);
63 break; 56 break;
64 case "ComPlusUserInPartitionRole": 57 case "ComPlusUserInPartitionRole":
65 this.ParseComPlusUserInPartitionRoleElement(element, componentId, null); 58 this.ParseComPlusUserInPartitionRoleElement(intermediate, section, element, componentId, null);
66 break; 59 break;
67 case "ComPlusGroupInPartitionRole": 60 case "ComPlusGroupInPartitionRole":
68 this.ParseComPlusGroupInPartitionRoleElement(element, componentId, null); 61 this.ParseComPlusGroupInPartitionRoleElement(intermediate, section, element, componentId, null);
69 break; 62 break;
70 case "ComPlusPartitionUser": 63 case "ComPlusPartitionUser":
71 this.ParseComPlusPartitionUserElement(element, componentId, null); 64 this.ParseComPlusPartitionUserElement(intermediate, section, element, componentId, null);
72 break; 65 break;
73 case "ComPlusApplication": 66 case "ComPlusApplication":
74 this.ParseComPlusApplicationElement(element, componentId, win64, null); 67 this.ParseComPlusApplicationElement(intermediate, section, element, componentId, win64, null);
75 break; 68 break;
76 case "ComPlusApplicationRole": 69 case "ComPlusApplicationRole":
77 this.ParseComPlusApplicationRoleElement(element, componentId, null); 70 this.ParseComPlusApplicationRoleElement(intermediate, section, element, componentId, null);
78 break; 71 break;
79 case "ComPlusUserInApplicationRole": 72 case "ComPlusUserInApplicationRole":
80 this.ParseComPlusUserInApplicationRoleElement(element, componentId, null); 73 this.ParseComPlusUserInApplicationRoleElement(intermediate, section, element, componentId, null);
81 break; 74 break;
82 case "ComPlusGroupInApplicationRole": 75 case "ComPlusGroupInApplicationRole":
83 this.ParseComPlusGroupInApplicationRoleElement(element, componentId, null); 76 this.ParseComPlusGroupInApplicationRoleElement(intermediate, section, element, componentId, null);
84 break; 77 break;
85 case "ComPlusAssembly": 78 case "ComPlusAssembly":
86 this.ParseComPlusAssemblyElement(element, componentId, win64, null); 79 this.ParseComPlusAssemblyElement(intermediate, section, element, componentId, win64, null);
87 break; 80 break;
88 case "ComPlusRoleForComponent": 81 case "ComPlusRoleForComponent":
89 this.ParseComPlusRoleForComponentElement(element, componentId, null); 82 this.ParseComPlusRoleForComponentElement(intermediate, section, element, componentId, null);
90 break; 83 break;
91 case "ComPlusRoleForInterface": 84 case "ComPlusRoleForInterface":
92 this.ParseComPlusRoleForInterfaceElement(element, componentId, null); 85 this.ParseComPlusRoleForInterfaceElement(intermediate, section, element, componentId, null);
93 break; 86 break;
94 case "ComPlusRoleForMethod": 87 case "ComPlusRoleForMethod":
95 this.ParseComPlusRoleForMethodElement(element, componentId, null); 88 this.ParseComPlusRoleForMethodElement(intermediate, section, element, componentId, null);
96 break; 89 break;
97 case "ComPlusSubscription": 90 case "ComPlusSubscription":
98 this.ParseComPlusSubscriptionElement(element, componentId, null); 91 this.ParseComPlusSubscriptionElement(intermediate, section, element, componentId, null);
99 break; 92 break;
100 default: 93 default:
101 this.Core.UnexpectedElement(parentElement, element); 94 this.ParseHelper.UnexpectedElement(parentElement, element);
102 break; 95 break;
103 } 96 }
104 break; 97 break;
@@ -108,24 +101,24 @@ namespace WixToolset.Extensions
108 switch (element.Name.LocalName) 101 switch (element.Name.LocalName)
109 { 102 {
110 case "ComPlusPartition": 103 case "ComPlusPartition":
111 this.ParseComPlusPartitionElement(element, null, false); 104 this.ParseComPlusPartitionElement(intermediate, section, element, null, false);
112 break; 105 break;
113 case "ComPlusPartitionRole": 106 case "ComPlusPartitionRole":
114 this.ParseComPlusPartitionRoleElement(element, null, null); 107 this.ParseComPlusPartitionRoleElement(intermediate, section, element, null, null);
115 break; 108 break;
116 case "ComPlusApplication": 109 case "ComPlusApplication":
117 this.ParseComPlusApplicationElement(element, null, false, null); 110 this.ParseComPlusApplicationElement(intermediate, section, element, null, false, null);
118 break; 111 break;
119 case "ComPlusApplicationRole": 112 case "ComPlusApplicationRole":
120 this.ParseComPlusApplicationRoleElement(element, null, null); 113 this.ParseComPlusApplicationRoleElement(intermediate, section, element, null, null);
121 break; 114 break;
122 default: 115 default:
123 this.Core.UnexpectedElement(parentElement, element); 116 this.ParseHelper.UnexpectedElement(parentElement, element);
124 break; 117 break;
125 } 118 }
126 break; 119 break;
127 default: 120 default:
128 this.Core.UnexpectedElement(parentElement, element); 121 this.ParseHelper.UnexpectedElement(parentElement, element);
129 break; 122 break;
130 } 123 }
131 } 124 }
@@ -135,9 +128,9 @@ namespace WixToolset.Extensions
135 /// </summary> 128 /// </summary>
136 /// <param name="node">Element to parse.</param> 129 /// <param name="node">Element to parse.</param>
137 /// <param name="componentKey">Identifier of parent component.</param> 130 /// <param name="componentKey">Identifier of parent component.</param>
138 private void ParseComPlusPartitionElement(XElement node, string componentKey, bool win64) 131 private void ParseComPlusPartitionElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, bool win64)
139 { 132 {
140 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 133 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
141 134
142 string key = null; 135 string key = null;
143 string id = null; 136 string id = null;
@@ -152,49 +145,49 @@ namespace WixToolset.Extensions
152 switch (attrib.Name.LocalName) 145 switch (attrib.Name.LocalName)
153 { 146 {
154 case "Id": 147 case "Id":
155 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 148 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
156 break; 149 break;
157 case "PartitionId": 150 case "PartitionId":
158 id = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); 151 id = this.TryFormatGuidValue(this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib));
159 break; 152 break;
160 case "Name": 153 case "Name":
161 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 154 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
162 break; 155 break;
163 case "Changeable": 156 case "Changeable":
164 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 157 this.Messaging.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
165 break; 158 break;
166 case "Deleteable": 159 case "Deleteable":
167 if (null == componentKey) 160 if (null == componentKey)
168 { 161 {
169 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 162 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
170 } 163 }
171 properties["Deleteable"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 164 properties["Deleteable"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
172 break; 165 break;
173 case "Description": 166 case "Description":
174 if (null == componentKey) 167 if (null == componentKey)
175 { 168 {
176 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 169 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
177 } 170 }
178 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 171 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
179 break; 172 break;
180 default: 173 default:
181 this.Core.UnexpectedAttribute(node, attrib); 174 this.ParseHelper.UnexpectedAttribute(node, attrib);
182 break; 175 break;
183 } 176 }
184 } 177 }
185 else 178 else
186 { 179 {
187 this.Core.ParseExtensionAttribute(node, attrib); 180 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
188 } 181 }
189 } 182 }
190 183
191 if (null != componentKey && null == name) 184 if (null != componentKey && null == name)
192 { 185 {
193 this.Core.OnMessage(ComPlusErrors.RequiredAttributeUnderComponent(sourceLineNumbers, node.Name.LocalName, "Name")); 186 this.Messaging.Write(ComPlusErrors.RequiredAttributeUnderComponent(sourceLineNumbers, node.Name.LocalName, "Name"));
194 } 187 }
195 if (null == componentKey && null == id && null == name) 188 if (null == componentKey && null == id && null == name)
196 { 189 {
197 this.Core.OnMessage(ComPlusErrors.RequiredAttributeNotUnderComponent(sourceLineNumbers, node.Name.LocalName, "Id", "Name")); 190 this.Messaging.Write(ComPlusErrors.RequiredAttributeNotUnderComponent(sourceLineNumbers, node.Name.LocalName, "Id", "Name"));
198 } 191 }
199 192
200 foreach (XElement child in node.Elements()) 193 foreach (XElement child in node.Elements())
@@ -204,58 +197,58 @@ namespace WixToolset.Extensions
204 switch (child.Name.LocalName) 197 switch (child.Name.LocalName)
205 { 198 {
206 case "ComPlusPartitionRole": 199 case "ComPlusPartitionRole":
207 this.ParseComPlusPartitionRoleElement(child, componentKey, key); 200 this.ParseComPlusPartitionRoleElement(intermediate, section, child, componentKey, key);
208 break; 201 break;
209 case "ComPlusPartitionUser": 202 case "ComPlusPartitionUser":
210 this.ParseComPlusPartitionUserElement(child, componentKey, key); 203 this.ParseComPlusPartitionUserElement(intermediate, section, child, componentKey, key);
211 break; 204 break;
212 case "ComPlusApplication": 205 case "ComPlusApplication":
213 this.ParseComPlusApplicationElement(child, componentKey, win64, key); 206 this.ParseComPlusApplicationElement(intermediate, section, child, componentKey, win64, key);
214 break; 207 break;
215 default: 208 default:
216 this.Core.UnexpectedElement(node, child); 209 this.ParseHelper.UnexpectedElement(node, child);
217 break; 210 break;
218 } 211 }
219 } 212 }
220 else 213 else
221 { 214 {
222 this.Core.ParseExtensionElement(node, child); 215 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
223 } 216 }
224 } 217 }
225 218
226 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusPartition"); 219 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusPartition");
227 row[0] = key; 220 row.Set(0, key);
228 row[1] = componentKey; 221 row.Set(1, componentKey);
229 row[2] = id; 222 row.Set(2, id);
230 row[3] = name; 223 row.Set(3, name);
231 224
232 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 225 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
233 while (propertiesEnumerator.MoveNext()) 226 while (propertiesEnumerator.MoveNext())
234 { 227 {
235 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusPartitionProperty"); 228 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusPartitionProperty");
236 propertyRow[0] = key; 229 propertyRow.Set(0, key);
237 propertyRow[1] = (string)propertiesEnumerator.Key; 230 propertyRow.Set(1, (string)propertiesEnumerator.Key);
238 propertyRow[2] = (string)propertiesEnumerator.Value; 231 propertyRow.Set(2, (string)propertiesEnumerator.Value);
239 } 232 }
240 233
241 if (componentKey != null) 234 if (componentKey != null)
242 { 235 {
243 if (win64) 236 if (win64)
244 { 237 {
245 if (this.Core.CurrentPlatform == Platform.IA64) 238 if (this.Context.Platform == Platform.IA64)
246 { 239 {
247 this.Core.OnMessage(WixErrors.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName)); 240 this.Messaging.Write(ErrorMessages.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName));
248 } 241 }
249 else 242 else
250 { 243 {
251 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64"); 244 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64");
252 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64"); 245 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64");
253 } 246 }
254 } 247 }
255 else 248 else
256 { 249 {
257 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall"); 250 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall");
258 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall"); 251 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall");
259 } 252 }
260 } 253 }
261 } 254 }
@@ -266,9 +259,9 @@ namespace WixToolset.Extensions
266 /// <param name="node">Element to parse.</param> 259 /// <param name="node">Element to parse.</param>
267 /// <param name="componentKey">Identifier of parent component.</param> 260 /// <param name="componentKey">Identifier of parent component.</param>
268 /// <param name="applicationKey">Optional identifier of parent application.</param> 261 /// <param name="applicationKey">Optional identifier of parent application.</param>
269 private void ParseComPlusPartitionRoleElement(XElement node, string componentKey, string partitionKey) 262 private void ParseComPlusPartitionRoleElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string partitionKey)
270 { 263 {
271 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 264 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
272 265
273 string key = null; 266 string key = null;
274 string name = null; 267 string name = null;
@@ -280,33 +273,33 @@ namespace WixToolset.Extensions
280 switch (attrib.Name.LocalName) 273 switch (attrib.Name.LocalName)
281 { 274 {
282 case "Id": 275 case "Id":
283 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 276 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
284 break; 277 break;
285 case "Partition": 278 case "Partition":
286 if (null != partitionKey) 279 if (null != partitionKey)
287 { 280 {
288 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 281 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
289 } 282 }
290 partitionKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 283 partitionKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
291 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartition", partitionKey); 284 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusPartition", partitionKey);
292 break; 285 break;
293 case "Name": 286 case "Name":
294 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 287 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
295 break; 288 break;
296 default: 289 default:
297 this.Core.UnexpectedAttribute(node, attrib); 290 this.ParseHelper.UnexpectedAttribute(node, attrib);
298 break; 291 break;
299 } 292 }
300 } 293 }
301 else 294 else
302 { 295 {
303 this.Core.ParseExtensionAttribute(node, attrib); 296 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
304 } 297 }
305 } 298 }
306 299
307 if (null == partitionKey) 300 if (null == partitionKey)
308 { 301 {
309 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Partition")); 302 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Partition"));
310 } 303 }
311 304
312 foreach (XElement child in node.Elements()) 305 foreach (XElement child in node.Elements())
@@ -316,27 +309,27 @@ namespace WixToolset.Extensions
316 switch (child.Name.LocalName) 309 switch (child.Name.LocalName)
317 { 310 {
318 case "ComPlusUserInPartitionRole": 311 case "ComPlusUserInPartitionRole":
319 this.ParseComPlusUserInPartitionRoleElement(child, componentKey, key); 312 this.ParseComPlusUserInPartitionRoleElement(intermediate, section, child, componentKey, key);
320 break; 313 break;
321 case "ComPlusGroupInPartitionRole": 314 case "ComPlusGroupInPartitionRole":
322 this.ParseComPlusGroupInPartitionRoleElement(child, componentKey, key); 315 this.ParseComPlusGroupInPartitionRoleElement(intermediate, section, child, componentKey, key);
323 break; 316 break;
324 default: 317 default:
325 this.Core.UnexpectedElement(node, child); 318 this.ParseHelper.UnexpectedElement(node, child);
326 break; 319 break;
327 } 320 }
328 } 321 }
329 else 322 else
330 { 323 {
331 this.Core.ParseExtensionElement(node, child); 324 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
332 } 325 }
333 } 326 }
334 327
335 // add table row 328 // add table row
336 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusPartitionRole"); 329 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusPartitionRole");
337 row[0] = key; 330 row.Set(0, key);
338 row[1] = partitionKey; 331 row.Set(1, partitionKey);
339 row[3] = name; 332 row.Set(3, name);
340 } 333 }
341 334
342 /// <summary> 335 /// <summary>
@@ -345,9 +338,9 @@ namespace WixToolset.Extensions
345 /// <param name="node">Element to parse.</param> 338 /// <param name="node">Element to parse.</param>
346 /// <param name="componentKey">Identifier of parent component.</param> 339 /// <param name="componentKey">Identifier of parent component.</param>
347 /// <param name="applicationKey">Optional identifier of parent application role.</param> 340 /// <param name="applicationKey">Optional identifier of parent application role.</param>
348 private void ParseComPlusUserInPartitionRoleElement(XElement node, string componentKey, string partitionRoleKey) 341 private void ParseComPlusUserInPartitionRoleElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string partitionRoleKey)
349 { 342 {
350 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 343 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
351 344
352 string key = null; 345 string key = null;
353 string user = null; 346 string user = null;
@@ -359,41 +352,41 @@ namespace WixToolset.Extensions
359 switch (attrib.Name.LocalName) 352 switch (attrib.Name.LocalName)
360 { 353 {
361 case "Id": 354 case "Id":
362 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 355 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
363 break; 356 break;
364 case "PartitionRole": 357 case "PartitionRole":
365 if (null != partitionRoleKey) 358 if (null != partitionRoleKey)
366 { 359 {
367 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 360 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
368 } 361 }
369 partitionRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 362 partitionRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
370 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartitionRole", partitionRoleKey); 363 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusPartitionRole", partitionRoleKey);
371 break; 364 break;
372 case "User": 365 case "User":
373 user = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 366 user = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
374 this.Core.CreateSimpleReference(sourceLineNumbers, "User", user); 367 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "User", user);
375 break; 368 break;
376 default: 369 default:
377 this.Core.UnexpectedAttribute(node, attrib); 370 this.ParseHelper.UnexpectedAttribute(node, attrib);
378 break; 371 break;
379 } 372 }
380 } 373 }
381 else 374 else
382 { 375 {
383 this.Core.ParseExtensionAttribute(node, attrib); 376 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
384 } 377 }
385 } 378 }
386 379
387 if (null == partitionRoleKey) 380 if (null == partitionRoleKey)
388 { 381 {
389 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PartitionRole")); 382 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PartitionRole"));
390 } 383 }
391 384
392 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusUserInPartitionRole"); 385 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusUserInPartitionRole");
393 row[0] = key; 386 row.Set(0, key);
394 row[1] = partitionRoleKey; 387 row.Set(1, partitionRoleKey);
395 row[2] = componentKey; 388 row.Set(2, componentKey);
396 row[3] = user; 389 row.Set(3, user);
397 } 390 }
398 391
399 /// <summary> 392 /// <summary>
@@ -402,9 +395,9 @@ namespace WixToolset.Extensions
402 /// <param name="node">Element to parse.</param> 395 /// <param name="node">Element to parse.</param>
403 /// <param name="componentKey">Identifier of parent component.</param> 396 /// <param name="componentKey">Identifier of parent component.</param>
404 /// <param name="applicationKey">Optional identifier of parent application role.</param> 397 /// <param name="applicationKey">Optional identifier of parent application role.</param>
405 private void ParseComPlusGroupInPartitionRoleElement(XElement node, string componentKey, string partitionRoleKey) 398 private void ParseComPlusGroupInPartitionRoleElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string partitionRoleKey)
406 { 399 {
407 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 400 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
408 401
409 string key = null; 402 string key = null;
410 string group = null; 403 string group = null;
@@ -416,41 +409,41 @@ namespace WixToolset.Extensions
416 switch (attrib.Name.LocalName) 409 switch (attrib.Name.LocalName)
417 { 410 {
418 case "Id": 411 case "Id":
419 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 412 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
420 break; 413 break;
421 case "PartitionRole": 414 case "PartitionRole":
422 if (null != partitionRoleKey) 415 if (null != partitionRoleKey)
423 { 416 {
424 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 417 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
425 } 418 }
426 partitionRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 419 partitionRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
427 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartitionRole", partitionRoleKey); 420 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusPartitionRole", partitionRoleKey);
428 break; 421 break;
429 case "Group": 422 case "Group":
430 group = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 423 group = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
431 this.Core.CreateSimpleReference(sourceLineNumbers, "Group", group); 424 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Group", group);
432 break; 425 break;
433 default: 426 default:
434 this.Core.UnexpectedAttribute(node, attrib); 427 this.ParseHelper.UnexpectedAttribute(node, attrib);
435 break; 428 break;
436 } 429 }
437 } 430 }
438 else 431 else
439 { 432 {
440 this.Core.ParseExtensionAttribute(node, attrib); 433 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
441 } 434 }
442 } 435 }
443 436
444 if (null == partitionRoleKey) 437 if (null == partitionRoleKey)
445 { 438 {
446 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PartitionRole")); 439 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PartitionRole"));
447 } 440 }
448 441
449 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusGroupInPartitionRole"); 442 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusGroupInPartitionRole");
450 row[0] = key; 443 row.Set(0, key);
451 row[1] = partitionRoleKey; 444 row.Set(1, partitionRoleKey);
452 row[2] = componentKey; 445 row.Set(2, componentKey);
453 row[3] = group; 446 row.Set(3, group);
454 } 447 }
455 448
456 /// <summary> 449 /// <summary>
@@ -458,9 +451,9 @@ namespace WixToolset.Extensions
458 /// </summary> 451 /// </summary>
459 /// <param name="node">Element to parse.</param> 452 /// <param name="node">Element to parse.</param>
460 /// <param name="componentKey">Identifier of parent component.</param> 453 /// <param name="componentKey">Identifier of parent component.</param>
461 private void ParseComPlusPartitionUserElement(XElement node, string componentKey, string partitionKey) 454 private void ParseComPlusPartitionUserElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string partitionKey)
462 { 455 {
463 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 456 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
464 457
465 string key = null; 458 string key = null;
466 string user = null; 459 string user = null;
@@ -472,41 +465,41 @@ namespace WixToolset.Extensions
472 switch (attrib.Name.LocalName) 465 switch (attrib.Name.LocalName)
473 { 466 {
474 case "Id": 467 case "Id":
475 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 468 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
476 break; 469 break;
477 case "Partition": 470 case "Partition":
478 if (null != partitionKey) 471 if (null != partitionKey)
479 { 472 {
480 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 473 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
481 } 474 }
482 partitionKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 475 partitionKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
483 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartition", partitionKey); 476 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusPartition", partitionKey);
484 break; 477 break;
485 case "User": 478 case "User":
486 user = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 479 user = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
487 this.Core.CreateSimpleReference(sourceLineNumbers, "User", user); 480 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "User", user);
488 break; 481 break;
489 default: 482 default:
490 this.Core.UnexpectedAttribute(node, attrib); 483 this.ParseHelper.UnexpectedAttribute(node, attrib);
491 break; 484 break;
492 } 485 }
493 } 486 }
494 else 487 else
495 { 488 {
496 this.Core.ParseExtensionAttribute(node, attrib); 489 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
497 } 490 }
498 } 491 }
499 492
500 if (null == partitionKey) 493 if (null == partitionKey)
501 { 494 {
502 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Partition")); 495 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Partition"));
503 } 496 }
504 497
505 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusPartitionUser"); 498 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusPartitionUser");
506 row[0] = key; 499 row.Set(0, key);
507 row[1] = partitionKey; 500 row.Set(1, partitionKey);
508 row[2] = componentKey; 501 row.Set(2, componentKey);
509 row[3] = user; 502 row.Set(3, user);
510 } 503 }
511 504
512 /// <summary> 505 /// <summary>
@@ -515,9 +508,9 @@ namespace WixToolset.Extensions
515 /// <param name="node">Element to parse.</param> 508 /// <param name="node">Element to parse.</param>
516 /// <param name="componentKey">Identifier of parent component.</param> 509 /// <param name="componentKey">Identifier of parent component.</param>
517 /// <param name="partitionKey">Optional identifier of parent partition.</param> 510 /// <param name="partitionKey">Optional identifier of parent partition.</param>
518 private void ParseComPlusApplicationElement(XElement node, string componentKey, bool win64, string partitionKey) 511 private void ParseComPlusApplicationElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, bool win64, string partitionKey)
519 { 512 {
520 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 513 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
521 514
522 string key = null; 515 string key = null;
523 string id = null; 516 string id = null;
@@ -532,35 +525,35 @@ namespace WixToolset.Extensions
532 switch (attrib.Name.LocalName) 525 switch (attrib.Name.LocalName)
533 { 526 {
534 case "Id": 527 case "Id":
535 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 528 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
536 break; 529 break;
537 case "Partition": 530 case "Partition":
538 if (null != partitionKey) 531 if (null != partitionKey)
539 { 532 {
540 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 533 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
541 } 534 }
542 partitionKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 535 partitionKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
543 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartition", partitionKey); 536 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusPartition", partitionKey);
544 break; 537 break;
545 case "ApplicationId": 538 case "ApplicationId":
546 id = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); 539 id = this.TryFormatGuidValue(this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib));
547 break; 540 break;
548 case "Name": 541 case "Name":
549 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 542 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
550 break; 543 break;
551 case "ThreeGigSupportEnabled": 544 case "ThreeGigSupportEnabled":
552 if (null == componentKey) 545 if (null == componentKey)
553 { 546 {
554 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 547 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
555 } 548 }
556 properties["3GigSupportEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 549 properties["3GigSupportEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
557 break; 550 break;
558 case "AccessChecksLevel": 551 case "AccessChecksLevel":
559 if (null == componentKey) 552 if (null == componentKey)
560 { 553 {
561 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 554 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
562 } 555 }
563 string accessChecksLevelValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 556 string accessChecksLevelValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
564 switch (accessChecksLevelValue) 557 switch (accessChecksLevelValue)
565 { 558 {
566 case "applicationLevel": 559 case "applicationLevel":
@@ -570,16 +563,16 @@ namespace WixToolset.Extensions
570 properties["AccessChecksLevel"] = "1"; 563 properties["AccessChecksLevel"] = "1";
571 break; 564 break;
572 default: 565 default:
573 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "AccessChecksLevel", accessChecksLevelValue, "applicationLevel", "applicationComponentLevel")); 566 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "AccessChecksLevel", accessChecksLevelValue, "applicationLevel", "applicationComponentLevel"));
574 break; 567 break;
575 } 568 }
576 break; 569 break;
577 case "Activation": 570 case "Activation":
578 if (null == componentKey) 571 if (null == componentKey)
579 { 572 {
580 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 573 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
581 } 574 }
582 string activationValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 575 string activationValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
583 switch (activationValue) 576 switch (activationValue)
584 { 577 {
585 case "inproc": 578 case "inproc":
@@ -589,30 +582,30 @@ namespace WixToolset.Extensions
589 properties["Activation"] = "Local"; 582 properties["Activation"] = "Local";
590 break; 583 break;
591 default: 584 default:
592 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "Activation", activationValue, "inproc", "local")); 585 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "Activation", activationValue, "inproc", "local"));
593 break; 586 break;
594 } 587 }
595 break; 588 break;
596 case "ApplicationAccessChecksEnabled": 589 case "ApplicationAccessChecksEnabled":
597 if (null == componentKey) 590 if (null == componentKey)
598 { 591 {
599 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 592 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
600 } 593 }
601 properties["ApplicationAccessChecksEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 594 properties["ApplicationAccessChecksEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
602 break; 595 break;
603 case "ApplicationDirectory": 596 case "ApplicationDirectory":
604 if (null == componentKey) 597 if (null == componentKey)
605 { 598 {
606 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 599 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
607 } 600 }
608 properties["ApplicationDirectory"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 601 properties["ApplicationDirectory"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
609 break; 602 break;
610 case "Authentication": 603 case "Authentication":
611 if (null == componentKey) 604 if (null == componentKey)
612 { 605 {
613 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 606 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
614 } 607 }
615 string authenticationValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 608 string authenticationValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
616 switch (authenticationValue) 609 switch (authenticationValue)
617 { 610 {
618 case "default": 611 case "default":
@@ -637,16 +630,16 @@ namespace WixToolset.Extensions
637 properties["Authentication"] = "6"; 630 properties["Authentication"] = "6";
638 break; 631 break;
639 default: 632 default:
640 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "Authentication", authenticationValue, "default", "none", "connect", "call", "packet", "integrity", "privacy")); 633 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "Authentication", authenticationValue, "default", "none", "connect", "call", "packet", "integrity", "privacy"));
641 break; 634 break;
642 } 635 }
643 break; 636 break;
644 case "AuthenticationCapability": 637 case "AuthenticationCapability":
645 if (null == componentKey) 638 if (null == componentKey)
646 { 639 {
647 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 640 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
648 } 641 }
649 string authenticationCapabilityValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 642 string authenticationCapabilityValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
650 switch (authenticationCapabilityValue) 643 switch (authenticationCapabilityValue)
651 { 644 {
652 case "none": 645 case "none":
@@ -662,110 +655,110 @@ namespace WixToolset.Extensions
662 properties["AuthenticationCapability"] = "64"; 655 properties["AuthenticationCapability"] = "64";
663 break; 656 break;
664 default: 657 default:
665 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "AuthenticationCapability", authenticationCapabilityValue, "none", "secureReference", "staticCloaking", "dynamicCloaking")); 658 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "AuthenticationCapability", authenticationCapabilityValue, "none", "secureReference", "staticCloaking", "dynamicCloaking"));
666 break; 659 break;
667 } 660 }
668 break; 661 break;
669 case "Changeable": 662 case "Changeable":
670 this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 663 this.Messaging.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
671 break; 664 break;
672 case "CommandLine": 665 case "CommandLine":
673 if (null == componentKey) 666 if (null == componentKey)
674 { 667 {
675 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 668 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
676 } 669 }
677 properties["CommandLine"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 670 properties["CommandLine"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
678 break; 671 break;
679 case "ConcurrentApps": 672 case "ConcurrentApps":
680 if (null == componentKey) 673 if (null == componentKey)
681 { 674 {
682 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 675 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
683 } 676 }
684 properties["ConcurrentApps"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 677 properties["ConcurrentApps"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
685 break; 678 break;
686 case "CreatedBy": 679 case "CreatedBy":
687 if (null == componentKey) 680 if (null == componentKey)
688 { 681 {
689 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 682 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
690 } 683 }
691 properties["CreatedBy"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 684 properties["CreatedBy"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
692 break; 685 break;
693 case "CRMEnabled": 686 case "CRMEnabled":
694 if (null == componentKey) 687 if (null == componentKey)
695 { 688 {
696 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 689 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
697 } 690 }
698 properties["CRMEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 691 properties["CRMEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
699 break; 692 break;
700 case "CRMLogFile": 693 case "CRMLogFile":
701 if (null == componentKey) 694 if (null == componentKey)
702 { 695 {
703 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 696 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
704 } 697 }
705 properties["CRMLogFile"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 698 properties["CRMLogFile"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
706 break; 699 break;
707 case "Deleteable": 700 case "Deleteable":
708 if (null == componentKey) 701 if (null == componentKey)
709 { 702 {
710 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 703 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
711 } 704 }
712 properties["Deleteable"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 705 properties["Deleteable"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
713 break; 706 break;
714 case "Description": 707 case "Description":
715 if (null == componentKey) 708 if (null == componentKey)
716 { 709 {
717 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 710 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
718 } 711 }
719 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 712 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
720 break; 713 break;
721 case "DumpEnabled": 714 case "DumpEnabled":
722 if (null == componentKey) 715 if (null == componentKey)
723 { 716 {
724 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 717 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
725 } 718 }
726 properties["DumpEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 719 properties["DumpEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
727 break; 720 break;
728 case "DumpOnException": 721 case "DumpOnException":
729 if (null == componentKey) 722 if (null == componentKey)
730 { 723 {
731 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 724 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
732 } 725 }
733 properties["DumpOnException"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 726 properties["DumpOnException"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
734 break; 727 break;
735 case "DumpOnFailfast": 728 case "DumpOnFailfast":
736 if (null == componentKey) 729 if (null == componentKey)
737 { 730 {
738 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 731 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
739 } 732 }
740 properties["DumpOnFailfast"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 733 properties["DumpOnFailfast"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
741 break; 734 break;
742 case "DumpPath": 735 case "DumpPath":
743 if (null == componentKey) 736 if (null == componentKey)
744 { 737 {
745 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 738 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
746 } 739 }
747 properties["DumpPath"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 740 properties["DumpPath"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
748 break; 741 break;
749 case "EventsEnabled": 742 case "EventsEnabled":
750 if (null == componentKey) 743 if (null == componentKey)
751 { 744 {
752 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 745 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
753 } 746 }
754 properties["EventsEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 747 properties["EventsEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
755 break; 748 break;
756 case "Identity": 749 case "Identity":
757 if (null == componentKey) 750 if (null == componentKey)
758 { 751 {
759 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 752 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
760 } 753 }
761 properties["Identity"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 754 properties["Identity"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
762 break; 755 break;
763 case "ImpersonationLevel": 756 case "ImpersonationLevel":
764 if (null == componentKey) 757 if (null == componentKey)
765 { 758 {
766 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 759 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
767 } 760 }
768 string impersonationLevelValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 761 string impersonationLevelValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
769 switch (impersonationLevelValue) 762 switch (impersonationLevelValue)
770 { 763 {
771 case "anonymous": 764 case "anonymous":
@@ -781,37 +774,37 @@ namespace WixToolset.Extensions
781 properties["ImpersonationLevel"] = "4"; 774 properties["ImpersonationLevel"] = "4";
782 break; 775 break;
783 default: 776 default:
784 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "ImpersonationLevel", impersonationLevelValue, "anonymous", "identify", "impersonate", "delegate")); 777 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "ImpersonationLevel", impersonationLevelValue, "anonymous", "identify", "impersonate", "delegate"));
785 break; 778 break;
786 } 779 }
787 break; 780 break;
788 case "IsEnabled": 781 case "IsEnabled":
789 if (null == componentKey) 782 if (null == componentKey)
790 { 783 {
791 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 784 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
792 } 785 }
793 properties["IsEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 786 properties["IsEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
794 break; 787 break;
795 case "MaxDumpCount": 788 case "MaxDumpCount":
796 if (null == componentKey) 789 if (null == componentKey)
797 { 790 {
798 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 791 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
799 } 792 }
800 properties["MaxDumpCount"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 793 properties["MaxDumpCount"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
801 break; 794 break;
802 case "Password": 795 case "Password":
803 if (null == componentKey) 796 if (null == componentKey)
804 { 797 {
805 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 798 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
806 } 799 }
807 properties["Password"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 800 properties["Password"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
808 break; 801 break;
809 case "QCAuthenticateMsgs": 802 case "QCAuthenticateMsgs":
810 if (null == componentKey) 803 if (null == componentKey)
811 { 804 {
812 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 805 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
813 } 806 }
814 string qcAuthenticateMsgsValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 807 string qcAuthenticateMsgsValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
815 switch (qcAuthenticateMsgsValue) 808 switch (qcAuthenticateMsgsValue)
816 { 809 {
817 case "secureApps": 810 case "secureApps":
@@ -824,128 +817,128 @@ namespace WixToolset.Extensions
824 properties["QCAuthenticateMsgs"] = "2"; 817 properties["QCAuthenticateMsgs"] = "2";
825 break; 818 break;
826 default: 819 default:
827 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "QCAuthenticateMsgs", qcAuthenticateMsgsValue, "secureApps", "off", "on")); 820 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "QCAuthenticateMsgs", qcAuthenticateMsgsValue, "secureApps", "off", "on"));
828 break; 821 break;
829 } 822 }
830 break; 823 break;
831 case "QCListenerMaxThreads": 824 case "QCListenerMaxThreads":
832 if (null == componentKey) 825 if (null == componentKey)
833 { 826 {
834 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 827 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
835 } 828 }
836 properties["QCListenerMaxThreads"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 829 properties["QCListenerMaxThreads"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
837 break; 830 break;
838 case "QueueListenerEnabled": 831 case "QueueListenerEnabled":
839 if (null == componentKey) 832 if (null == componentKey)
840 { 833 {
841 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 834 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
842 } 835 }
843 properties["QueueListenerEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 836 properties["QueueListenerEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
844 break; 837 break;
845 case "QueuingEnabled": 838 case "QueuingEnabled":
846 if (null == componentKey) 839 if (null == componentKey)
847 { 840 {
848 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 841 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
849 } 842 }
850 properties["QueuingEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 843 properties["QueuingEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
851 break; 844 break;
852 case "RecycleActivationLimit": 845 case "RecycleActivationLimit":
853 if (null == componentKey) 846 if (null == componentKey)
854 { 847 {
855 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 848 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
856 } 849 }
857 properties["RecycleActivationLimit"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 850 properties["RecycleActivationLimit"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
858 break; 851 break;
859 case "RecycleCallLimit": 852 case "RecycleCallLimit":
860 if (null == componentKey) 853 if (null == componentKey)
861 { 854 {
862 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 855 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
863 } 856 }
864 properties["RecycleCallLimit"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 857 properties["RecycleCallLimit"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
865 break; 858 break;
866 case "RecycleExpirationTimeout": 859 case "RecycleExpirationTimeout":
867 if (null == componentKey) 860 if (null == componentKey)
868 { 861 {
869 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 862 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
870 } 863 }
871 properties["RecycleExpirationTimeout"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 864 properties["RecycleExpirationTimeout"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
872 break; 865 break;
873 case "RecycleLifetimeLimit": 866 case "RecycleLifetimeLimit":
874 if (null == componentKey) 867 if (null == componentKey)
875 { 868 {
876 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 869 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
877 } 870 }
878 properties["RecycleLifetimeLimit"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 871 properties["RecycleLifetimeLimit"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
879 break; 872 break;
880 case "RecycleMemoryLimit": 873 case "RecycleMemoryLimit":
881 if (null == componentKey) 874 if (null == componentKey)
882 { 875 {
883 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 876 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
884 } 877 }
885 properties["RecycleMemoryLimit"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 878 properties["RecycleMemoryLimit"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
886 break; 879 break;
887 case "Replicable": 880 case "Replicable":
888 if (null == componentKey) 881 if (null == componentKey)
889 { 882 {
890 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 883 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
891 } 884 }
892 properties["Replicable"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 885 properties["Replicable"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
893 break; 886 break;
894 case "RunForever": 887 case "RunForever":
895 if (null == componentKey) 888 if (null == componentKey)
896 { 889 {
897 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 890 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
898 } 891 }
899 properties["RunForever"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 892 properties["RunForever"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
900 break; 893 break;
901 case "ShutdownAfter": 894 case "ShutdownAfter":
902 if (null == componentKey) 895 if (null == componentKey)
903 { 896 {
904 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 897 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
905 } 898 }
906 properties["ShutdownAfter"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 899 properties["ShutdownAfter"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
907 break; 900 break;
908 case "SoapActivated": 901 case "SoapActivated":
909 if (null == componentKey) 902 if (null == componentKey)
910 { 903 {
911 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 904 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
912 } 905 }
913 properties["SoapActivated"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 906 properties["SoapActivated"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
914 break; 907 break;
915 case "SoapBaseUrl": 908 case "SoapBaseUrl":
916 if (null == componentKey) 909 if (null == componentKey)
917 { 910 {
918 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 911 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
919 } 912 }
920 properties["SoapBaseUrl"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 913 properties["SoapBaseUrl"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
921 break; 914 break;
922 case "SoapMailTo": 915 case "SoapMailTo":
923 if (null == componentKey) 916 if (null == componentKey)
924 { 917 {
925 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 918 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
926 } 919 }
927 properties["SoapMailTo"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 920 properties["SoapMailTo"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
928 break; 921 break;
929 case "SoapVRoot": 922 case "SoapVRoot":
930 if (null == componentKey) 923 if (null == componentKey)
931 { 924 {
932 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 925 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
933 } 926 }
934 properties["SoapVRoot"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 927 properties["SoapVRoot"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
935 break; 928 break;
936 case "SRPEnabled": 929 case "SRPEnabled":
937 if (null == componentKey) 930 if (null == componentKey)
938 { 931 {
939 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 932 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
940 } 933 }
941 properties["SRPEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 934 properties["SRPEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
942 break; 935 break;
943 case "SRPTrustLevel": 936 case "SRPTrustLevel":
944 if (null == componentKey) 937 if (null == componentKey)
945 { 938 {
946 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 939 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
947 } 940 }
948 string srpTrustLevelValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 941 string srpTrustLevelValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
949 switch (srpTrustLevelValue) 942 switch (srpTrustLevelValue)
950 { 943 {
951 case "disallowed": 944 case "disallowed":
@@ -955,28 +948,28 @@ namespace WixToolset.Extensions
955 properties["SRPTrustLevel"] = "262144"; 948 properties["SRPTrustLevel"] = "262144";
956 break; 949 break;
957 default: 950 default:
958 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "SRPTrustLevel", srpTrustLevelValue, "disallowed", "fullyTrusted")); 951 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "SRPTrustLevel", srpTrustLevelValue, "disallowed", "fullyTrusted"));
959 break; 952 break;
960 } 953 }
961 break; 954 break;
962 default: 955 default:
963 this.Core.UnexpectedAttribute(node, attrib); 956 this.ParseHelper.UnexpectedAttribute(node, attrib);
964 break; 957 break;
965 } 958 }
966 } 959 }
967 else 960 else
968 { 961 {
969 this.Core.ParseExtensionAttribute(node, attrib); 962 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
970 } 963 }
971 } 964 }
972 965
973 if (null != componentKey && null == name) 966 if (null != componentKey && null == name)
974 { 967 {
975 this.Core.OnMessage(ComPlusErrors.RequiredAttributeUnderComponent(sourceLineNumbers, node.Name.LocalName, "Name")); 968 this.Messaging.Write(ComPlusErrors.RequiredAttributeUnderComponent(sourceLineNumbers, node.Name.LocalName, "Name"));
976 } 969 }
977 if (null == componentKey && null == id && null == name) 970 if (null == componentKey && null == id && null == name)
978 { 971 {
979 this.Core.OnMessage(ComPlusErrors.RequiredAttributeNotUnderComponent(sourceLineNumbers, node.Name.LocalName, "Id", "Name")); 972 this.Messaging.Write(ComPlusErrors.RequiredAttributeNotUnderComponent(sourceLineNumbers, node.Name.LocalName, "Id", "Name"));
980 } 973 }
981 974
982 foreach (XElement child in node.Elements()) 975 foreach (XElement child in node.Elements())
@@ -986,56 +979,56 @@ namespace WixToolset.Extensions
986 switch (child.Name.LocalName) 979 switch (child.Name.LocalName)
987 { 980 {
988 case "ComPlusApplicationRole": 981 case "ComPlusApplicationRole":
989 this.ParseComPlusApplicationRoleElement(child, componentKey, key); 982 this.ParseComPlusApplicationRoleElement(intermediate, section, child, componentKey, key);
990 break; 983 break;
991 case "ComPlusAssembly": 984 case "ComPlusAssembly":
992 this.ParseComPlusAssemblyElement(child, componentKey, win64, key); 985 this.ParseComPlusAssemblyElement(intermediate, section, child, componentKey, win64, key);
993 break; 986 break;
994 default: 987 default:
995 this.Core.UnexpectedElement(node, child); 988 this.ParseHelper.UnexpectedElement(node, child);
996 break; 989 break;
997 } 990 }
998 } 991 }
999 else 992 else
1000 { 993 {
1001 this.Core.ParseExtensionElement(node, child); 994 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
1002 } 995 }
1003 } 996 }
1004 997
1005 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusApplication"); 998 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusApplication");
1006 row[0] = key; 999 row.Set(0, key);
1007 row[1] = partitionKey; 1000 row.Set(1, partitionKey);
1008 row[2] = componentKey; 1001 row.Set(2, componentKey);
1009 row[3] = id; 1002 row.Set(3, id);
1010 row[4] = name; 1003 row.Set(4, name);
1011 1004
1012 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 1005 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
1013 while (propertiesEnumerator.MoveNext()) 1006 while (propertiesEnumerator.MoveNext())
1014 { 1007 {
1015 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusApplicationProperty"); 1008 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusApplicationProperty");
1016 propertyRow[0] = key; 1009 propertyRow.Set(0, key);
1017 propertyRow[1] = (string)propertiesEnumerator.Key; 1010 propertyRow.Set(1, (string)propertiesEnumerator.Key);
1018 propertyRow[2] = (string)propertiesEnumerator.Value; 1011 propertyRow.Set(2, (string)propertiesEnumerator.Value);
1019 } 1012 }
1020 1013
1021 if (componentKey != null) 1014 if (componentKey != null)
1022 { 1015 {
1023 if (win64) 1016 if (win64)
1024 { 1017 {
1025 if (this.Core.CurrentPlatform == Platform.IA64) 1018 if (this.Context.Platform == Platform.IA64)
1026 { 1019 {
1027 this.Core.OnMessage(WixErrors.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName)); 1020 this.Messaging.Write(ErrorMessages.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName));
1028 } 1021 }
1029 else 1022 else
1030 { 1023 {
1031 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64"); 1024 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64");
1032 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64"); 1025 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64");
1033 } 1026 }
1034 } 1027 }
1035 else 1028 else
1036 { 1029 {
1037 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall"); 1030 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall");
1038 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall"); 1031 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall");
1039 } 1032 }
1040 } 1033 }
1041 } 1034 }
@@ -1046,9 +1039,9 @@ namespace WixToolset.Extensions
1046 /// <param name="node">Element to parse.</param> 1039 /// <param name="node">Element to parse.</param>
1047 /// <param name="componentKey">Identifier of parent component.</param> 1040 /// <param name="componentKey">Identifier of parent component.</param>
1048 /// <param name="applicationKey">Optional identifier of parent application.</param> 1041 /// <param name="applicationKey">Optional identifier of parent application.</param>
1049 private void ParseComPlusApplicationRoleElement(XElement node, string componentKey, string applicationKey) 1042 private void ParseComPlusApplicationRoleElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string applicationKey)
1050 { 1043 {
1051 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1044 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1052 1045
1053 string key = null; 1046 string key = null;
1054 string name = null; 1047 string name = null;
@@ -1062,40 +1055,40 @@ namespace WixToolset.Extensions
1062 switch (attrib.Name.LocalName) 1055 switch (attrib.Name.LocalName)
1063 { 1056 {
1064 case "Id": 1057 case "Id":
1065 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1058 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1066 break; 1059 break;
1067 case "Application": 1060 case "Application":
1068 if (null != applicationKey) 1061 if (null != applicationKey)
1069 { 1062 {
1070 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1063 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1071 } 1064 }
1072 applicationKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1065 applicationKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1073 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusApplication", applicationKey); 1066 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusApplication", applicationKey);
1074 break; 1067 break;
1075 case "Name": 1068 case "Name":
1076 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1069 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1077 break; 1070 break;
1078 case "Description": 1071 case "Description":
1079 if (null == componentKey) 1072 if (null == componentKey)
1080 { 1073 {
1081 this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 1074 this.Messaging.Write(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
1082 } 1075 }
1083 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1076 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1084 break; 1077 break;
1085 default: 1078 default:
1086 this.Core.UnexpectedAttribute(node, attrib); 1079 this.ParseHelper.UnexpectedAttribute(node, attrib);
1087 break; 1080 break;
1088 } 1081 }
1089 } 1082 }
1090 else 1083 else
1091 { 1084 {
1092 this.Core.ParseExtensionAttribute(node, attrib); 1085 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1093 } 1086 }
1094 } 1087 }
1095 1088
1096 if (null == applicationKey) 1089 if (null == applicationKey)
1097 { 1090 {
1098 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Application")); 1091 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Application"));
1099 } 1092 }
1100 1093
1101 foreach (XElement child in node.Elements()) 1094 foreach (XElement child in node.Elements())
@@ -1105,35 +1098,35 @@ namespace WixToolset.Extensions
1105 switch (child.Name.LocalName) 1098 switch (child.Name.LocalName)
1106 { 1099 {
1107 case "ComPlusUserInApplicationRole": 1100 case "ComPlusUserInApplicationRole":
1108 this.ParseComPlusUserInApplicationRoleElement(child, componentKey, key); 1101 this.ParseComPlusUserInApplicationRoleElement(intermediate, section, child, componentKey, key);
1109 break; 1102 break;
1110 case "ComPlusGroupInApplicationRole": 1103 case "ComPlusGroupInApplicationRole":
1111 this.ParseComPlusGroupInApplicationRoleElement(child, componentKey, key); 1104 this.ParseComPlusGroupInApplicationRoleElement(intermediate, section, child, componentKey, key);
1112 break; 1105 break;
1113 default: 1106 default:
1114 this.Core.UnexpectedElement(node, child); 1107 this.ParseHelper.UnexpectedElement(node, child);
1115 break; 1108 break;
1116 } 1109 }
1117 } 1110 }
1118 else 1111 else
1119 { 1112 {
1120 this.Core.ParseExtensionElement(node, child); 1113 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
1121 } 1114 }
1122 } 1115 }
1123 1116
1124 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusApplicationRole"); 1117 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusApplicationRole");
1125 row[0] = key; 1118 row.Set(0, key);
1126 row[1] = applicationKey; 1119 row.Set(1, applicationKey);
1127 row[2] = componentKey; 1120 row.Set(2, componentKey);
1128 row[3] = name; 1121 row.Set(3, name);
1129 1122
1130 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 1123 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
1131 while (propertiesEnumerator.MoveNext()) 1124 while (propertiesEnumerator.MoveNext())
1132 { 1125 {
1133 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusApplicationRoleProperty"); 1126 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusApplicationRoleProperty");
1134 propertyRow[0] = key; 1127 propertyRow.Set(0, key);
1135 propertyRow[1] = (string)propertiesEnumerator.Key; 1128 propertyRow.Set(1, (string)propertiesEnumerator.Key);
1136 propertyRow[2] = (string)propertiesEnumerator.Value; 1129 propertyRow.Set(2, (string)propertiesEnumerator.Value);
1137 } 1130 }
1138 } 1131 }
1139 1132
@@ -1143,9 +1136,9 @@ namespace WixToolset.Extensions
1143 /// <param name="node">Element to parse.</param> 1136 /// <param name="node">Element to parse.</param>
1144 /// <param name="componentKey">Identifier of parent component.</param> 1137 /// <param name="componentKey">Identifier of parent component.</param>
1145 /// <param name="applicationKey">Optional identifier of parent application role.</param> 1138 /// <param name="applicationKey">Optional identifier of parent application role.</param>
1146 private void ParseComPlusUserInApplicationRoleElement(XElement node, string componentKey, string applicationRoleKey) 1139 private void ParseComPlusUserInApplicationRoleElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string applicationRoleKey)
1147 { 1140 {
1148 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1141 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1149 1142
1150 string key = null; 1143 string key = null;
1151 string user = null; 1144 string user = null;
@@ -1157,41 +1150,41 @@ namespace WixToolset.Extensions
1157 switch (attrib.Name.LocalName) 1150 switch (attrib.Name.LocalName)
1158 { 1151 {
1159 case "Id": 1152 case "Id":
1160 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1153 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1161 break; 1154 break;
1162 case "ApplicationRole": 1155 case "ApplicationRole":
1163 if (null != applicationRoleKey) 1156 if (null != applicationRoleKey)
1164 { 1157 {
1165 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1158 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1166 } 1159 }
1167 applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1160 applicationRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1168 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusApplicationRole", applicationRoleKey); 1161 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusApplicationRole", applicationRoleKey);
1169 break; 1162 break;
1170 case "User": 1163 case "User":
1171 user = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1164 user = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1172 this.Core.CreateSimpleReference(sourceLineNumbers, "User", user); 1165 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "User", user);
1173 break; 1166 break;
1174 default: 1167 default:
1175 this.Core.UnexpectedAttribute(node, attrib); 1168 this.ParseHelper.UnexpectedAttribute(node, attrib);
1176 break; 1169 break;
1177 } 1170 }
1178 } 1171 }
1179 else 1172 else
1180 { 1173 {
1181 this.Core.ParseExtensionAttribute(node, attrib); 1174 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1182 } 1175 }
1183 } 1176 }
1184 1177
1185 if (null == applicationRoleKey) 1178 if (null == applicationRoleKey)
1186 { 1179 {
1187 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ApplicationRole")); 1180 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ApplicationRole"));
1188 } 1181 }
1189 1182
1190 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusUserInApplicationRole"); 1183 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusUserInApplicationRole");
1191 row[0] = key; 1184 row.Set(0, key);
1192 row[1] = applicationRoleKey; 1185 row.Set(1, applicationRoleKey);
1193 row[2] = componentKey; 1186 row.Set(2, componentKey);
1194 row[3] = user; 1187 row.Set(3, user);
1195 } 1188 }
1196 1189
1197 /// <summary> 1190 /// <summary>
@@ -1200,9 +1193,9 @@ namespace WixToolset.Extensions
1200 /// <param name="node">Element to parse.</param> 1193 /// <param name="node">Element to parse.</param>
1201 /// <param name="componentKey">Identifier of parent component.</param> 1194 /// <param name="componentKey">Identifier of parent component.</param>
1202 /// <param name="applicationKey">Optional identifier of parent application role.</param> 1195 /// <param name="applicationKey">Optional identifier of parent application role.</param>
1203 private void ParseComPlusGroupInApplicationRoleElement(XElement node, string componentKey, string applicationRoleKey) 1196 private void ParseComPlusGroupInApplicationRoleElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string applicationRoleKey)
1204 { 1197 {
1205 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1198 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1206 1199
1207 string key = null; 1200 string key = null;
1208 string group = null; 1201 string group = null;
@@ -1214,41 +1207,41 @@ namespace WixToolset.Extensions
1214 switch (attrib.Name.LocalName) 1207 switch (attrib.Name.LocalName)
1215 { 1208 {
1216 case "Id": 1209 case "Id":
1217 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1210 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1218 break; 1211 break;
1219 case "ApplicationRole": 1212 case "ApplicationRole":
1220 if (null != applicationRoleKey) 1213 if (null != applicationRoleKey)
1221 { 1214 {
1222 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1215 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1223 } 1216 }
1224 applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1217 applicationRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1225 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusApplicationRole", applicationRoleKey); 1218 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusApplicationRole", applicationRoleKey);
1226 break; 1219 break;
1227 case "Group": 1220 case "Group":
1228 group = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1221 group = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1229 this.Core.CreateSimpleReference(sourceLineNumbers, "Group", group); 1222 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Group", group);
1230 break; 1223 break;
1231 default: 1224 default:
1232 this.Core.UnexpectedAttribute(node, attrib); 1225 this.ParseHelper.UnexpectedAttribute(node, attrib);
1233 break; 1226 break;
1234 } 1227 }
1235 } 1228 }
1236 else 1229 else
1237 { 1230 {
1238 this.Core.ParseExtensionAttribute(node, attrib); 1231 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1239 } 1232 }
1240 } 1233 }
1241 1234
1242 if (null == applicationRoleKey) 1235 if (null == applicationRoleKey)
1243 { 1236 {
1244 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ApplicationRole")); 1237 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ApplicationRole"));
1245 } 1238 }
1246 1239
1247 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusGroupInApplicationRole"); 1240 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusGroupInApplicationRole");
1248 row[0] = key; 1241 row.Set(0, key);
1249 row[1] = applicationRoleKey; 1242 row.Set(1, applicationRoleKey);
1250 row[2] = componentKey; 1243 row.Set(2, componentKey);
1251 row[3] = group; 1244 row.Set(3, group);
1252 } 1245 }
1253 1246
1254 /// <summary> 1247 /// <summary>
@@ -1257,9 +1250,9 @@ namespace WixToolset.Extensions
1257 /// <param name="node">Element to parse.</param> 1250 /// <param name="node">Element to parse.</param>
1258 /// <param name="componentKey">Identifier of parent component.</param> 1251 /// <param name="componentKey">Identifier of parent component.</param>
1259 /// <param name="applicationKey">Optional identifier of parent application.</param> 1252 /// <param name="applicationKey">Optional identifier of parent application.</param>
1260 private void ParseComPlusAssemblyElement(XElement node, string componentKey, bool win64, string applicationKey) 1253 private void ParseComPlusAssemblyElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, bool win64, string applicationKey)
1261 { 1254 {
1262 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1255 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1263 1256
1264 string key = null; 1257 string key = null;
1265 string assemblyName = null; 1258 string assemblyName = null;
@@ -1277,30 +1270,30 @@ namespace WixToolset.Extensions
1277 switch (attrib.Name.LocalName) 1270 switch (attrib.Name.LocalName)
1278 { 1271 {
1279 case "Id": 1272 case "Id":
1280 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1273 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1281 break; 1274 break;
1282 case "Application": 1275 case "Application":
1283 if (null != applicationKey) 1276 if (null != applicationKey)
1284 { 1277 {
1285 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1278 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1286 } 1279 }
1287 applicationKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1280 applicationKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1288 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusApplication", applicationKey); 1281 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusApplication", applicationKey);
1289 break; 1282 break;
1290 case "AssemblyName": 1283 case "AssemblyName":
1291 assemblyName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1284 assemblyName = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1292 break; 1285 break;
1293 case "DllPath": 1286 case "DllPath":
1294 dllPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1287 dllPath = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1295 break; 1288 break;
1296 case "TlbPath": 1289 case "TlbPath":
1297 tlbPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1290 tlbPath = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1298 break; 1291 break;
1299 case "PSDllPath": 1292 case "PSDllPath":
1300 psDllPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1293 psDllPath = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1301 break; 1294 break;
1302 case "Type": 1295 case "Type":
1303 string typeValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1296 string typeValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1304 switch (typeValue) 1297 switch (typeValue)
1305 { 1298 {
1306 case ".net": 1299 case ".net":
@@ -1310,12 +1303,12 @@ namespace WixToolset.Extensions
1310 attributes &= ~(int)CpiAssemblyAttributes.DotNetAssembly; 1303 attributes &= ~(int)CpiAssemblyAttributes.DotNetAssembly;
1311 break; 1304 break;
1312 default: 1305 default:
1313 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusAssembly", "Type", typeValue, ".net", "native")); 1306 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusAssembly", "Type", typeValue, ".net", "native"));
1314 break; 1307 break;
1315 } 1308 }
1316 break; 1309 break;
1317 case "EventClass": 1310 case "EventClass":
1318 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 1311 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
1319 { 1312 {
1320 attributes |= (int)CpiAssemblyAttributes.EventClass; 1313 attributes |= (int)CpiAssemblyAttributes.EventClass;
1321 } 1314 }
@@ -1325,7 +1318,7 @@ namespace WixToolset.Extensions
1325 } 1318 }
1326 break; 1319 break;
1327 case "DllPathFromGAC": 1320 case "DllPathFromGAC":
1328 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 1321 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
1329 { 1322 {
1330 attributes |= (int)CpiAssemblyAttributes.DllPathFromGAC; 1323 attributes |= (int)CpiAssemblyAttributes.DllPathFromGAC;
1331 } 1324 }
@@ -1335,7 +1328,7 @@ namespace WixToolset.Extensions
1335 } 1328 }
1336 break; 1329 break;
1337 case "RegisterInCommit": 1330 case "RegisterInCommit":
1338 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) 1331 if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib))
1339 { 1332 {
1340 attributes |= (int)CpiAssemblyAttributes.RegisterInCommit; 1333 attributes |= (int)CpiAssemblyAttributes.RegisterInCommit;
1341 } 1334 }
@@ -1345,35 +1338,35 @@ namespace WixToolset.Extensions
1345 } 1338 }
1346 break; 1339 break;
1347 default: 1340 default:
1348 this.Core.UnexpectedAttribute(node, attrib); 1341 this.ParseHelper.UnexpectedAttribute(node, attrib);
1349 break; 1342 break;
1350 } 1343 }
1351 } 1344 }
1352 else 1345 else
1353 { 1346 {
1354 this.Core.ParseExtensionAttribute(node, attrib); 1347 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1355 } 1348 }
1356 } 1349 }
1357 1350
1358 if (null == applicationKey && 0 == (attributes & (int)CpiAssemblyAttributes.DotNetAssembly)) 1351 if (null == applicationKey && 0 == (attributes & (int)CpiAssemblyAttributes.DotNetAssembly))
1359 { 1352 {
1360 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Application", "Type", "native")); 1353 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Application", "Type", "native"));
1361 } 1354 }
1362 if (null != assemblyName && 0 == (attributes & (int)CpiAssemblyAttributes.DllPathFromGAC)) 1355 if (null != assemblyName && 0 == (attributes & (int)CpiAssemblyAttributes.DllPathFromGAC))
1363 { 1356 {
1364 this.Core.OnMessage(ComPlusErrors.UnexpectedAttributeWithoutOtherValue(sourceLineNumbers, node.Name.LocalName, "AssemblyName", "DllPathFromGAC", "no")); 1357 this.Messaging.Write(ComPlusErrors.UnexpectedAttributeWithoutOtherValue(sourceLineNumbers, node.Name.LocalName, "AssemblyName", "DllPathFromGAC", "no"));
1365 } 1358 }
1366 if (null == tlbPath && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly)) 1359 if (null == tlbPath && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly))
1367 { 1360 {
1368 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "TlbPath", "Type", ".net")); 1361 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "TlbPath", "Type", ".net"));
1369 } 1362 }
1370 if (null != psDllPath && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly)) 1363 if (null != psDllPath && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly))
1371 { 1364 {
1372 this.Core.OnMessage(ComPlusErrors.UnexpectedAttributeWithOtherValue(sourceLineNumbers, node.Name.LocalName, "PSDllPath", "Type", ".net")); 1365 this.Messaging.Write(ComPlusErrors.UnexpectedAttributeWithOtherValue(sourceLineNumbers, node.Name.LocalName, "PSDllPath", "Type", ".net"));
1373 } 1366 }
1374 if (0 != (attributes & (int)CpiAssemblyAttributes.EventClass) && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly)) 1367 if (0 != (attributes & (int)CpiAssemblyAttributes.EventClass) && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly))
1375 { 1368 {
1376 this.Core.OnMessage(ComPlusErrors.UnexpectedAttributeWithOtherValue(sourceLineNumbers, node.Name.LocalName, "EventClass", "yes", "Type", ".net")); 1369 this.Messaging.Write(ComPlusErrors.UnexpectedAttributeWithOtherValue(sourceLineNumbers, node.Name.LocalName, "EventClass", "yes", "Type", ".net"));
1377 } 1370 }
1378 1371
1379 foreach (XElement child in node.Elements()) 1372 foreach (XElement child in node.Elements())
@@ -1383,54 +1376,54 @@ namespace WixToolset.Extensions
1383 switch (child.Name.LocalName) 1376 switch (child.Name.LocalName)
1384 { 1377 {
1385 case "ComPlusAssemblyDependency": 1378 case "ComPlusAssemblyDependency":
1386 this.ParseComPlusAssemblyDependencyElement(child, key); 1379 this.ParseComPlusAssemblyDependencyElement(intermediate, section, child, key);
1387 break; 1380 break;
1388 case "ComPlusComponent": 1381 case "ComPlusComponent":
1389 this.ParseComPlusComponentElement(child, componentKey, key); 1382 this.ParseComPlusComponentElement(intermediate, section, child, componentKey, key);
1390 hasComponents = true; 1383 hasComponents = true;
1391 break; 1384 break;
1392 default: 1385 default:
1393 this.Core.UnexpectedElement(node, child); 1386 this.ParseHelper.UnexpectedElement(node, child);
1394 break; 1387 break;
1395 } 1388 }
1396 } 1389 }
1397 else 1390 else
1398 { 1391 {
1399 this.Core.ParseExtensionElement(node, child); 1392 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
1400 } 1393 }
1401 } 1394 }
1402 1395
1403 if (0 == (attributes & (int)CpiAssemblyAttributes.DotNetAssembly) && !hasComponents) 1396 if (0 == (attributes & (int)CpiAssemblyAttributes.DotNetAssembly) && !hasComponents)
1404 { 1397 {
1405 this.Core.OnMessage(ComPlusWarnings.MissingComponents(sourceLineNumbers)); 1398 this.Messaging.Write(ComPlusWarnings.MissingComponents(sourceLineNumbers));
1406 } 1399 }
1407 1400
1408 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusAssembly"); 1401 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusAssembly");
1409 row[0] = key; 1402 row.Set(0, key);
1410 row[1] = applicationKey; 1403 row.Set(1, applicationKey);
1411 row[2] = componentKey; 1404 row.Set(2, componentKey);
1412 row[3] = assemblyName; 1405 row.Set(3, assemblyName);
1413 row[4] = dllPath; 1406 row.Set(4, dllPath);
1414 row[5] = tlbPath; 1407 row.Set(5, tlbPath);
1415 row[6] = psDllPath; 1408 row.Set(6, psDllPath);
1416 row[7] = attributes; 1409 row.Set(7, attributes);
1417 1410
1418 if (win64) 1411 if (win64)
1419 { 1412 {
1420 if (this.Core.CurrentPlatform == Platform.IA64) 1413 if (this.Context.Platform == Platform.IA64)
1421 { 1414 {
1422 this.Core.OnMessage(WixErrors.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName)); 1415 this.Messaging.Write(ErrorMessages.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName));
1423 } 1416 }
1424 else 1417 else
1425 { 1418 {
1426 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64"); 1419 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64");
1427 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64"); 1420 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64");
1428 } 1421 }
1429 } 1422 }
1430 else 1423 else
1431 { 1424 {
1432 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall"); 1425 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall");
1433 this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall"); 1426 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall");
1434 } 1427 }
1435 } 1428 }
1436 1429
@@ -1439,9 +1432,9 @@ namespace WixToolset.Extensions
1439 /// </summary> 1432 /// </summary>
1440 /// <param name="node">Element to parse.</param> 1433 /// <param name="node">Element to parse.</param>
1441 /// <param name="assemblyKey">Identifier of parent assembly.</param> 1434 /// <param name="assemblyKey">Identifier of parent assembly.</param>
1442 private void ParseComPlusAssemblyDependencyElement(XElement node, string assemblyKey) 1435 private void ParseComPlusAssemblyDependencyElement(Intermediate intermediate, IntermediateSection section, XElement node, string assemblyKey)
1443 { 1436 {
1444 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1437 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1445 1438
1446 string requiredAssemblyKey = null; 1439 string requiredAssemblyKey = null;
1447 1440
@@ -1452,22 +1445,22 @@ namespace WixToolset.Extensions
1452 switch (attrib.Name.LocalName) 1445 switch (attrib.Name.LocalName)
1453 { 1446 {
1454 case "RequiredAssembly": 1447 case "RequiredAssembly":
1455 requiredAssemblyKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1448 requiredAssemblyKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1456 break; 1449 break;
1457 default: 1450 default:
1458 this.Core.UnexpectedAttribute(node, attrib); 1451 this.ParseHelper.UnexpectedAttribute(node, attrib);
1459 break; 1452 break;
1460 } 1453 }
1461 } 1454 }
1462 else 1455 else
1463 { 1456 {
1464 this.Core.ParseExtensionAttribute(node, attrib); 1457 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1465 } 1458 }
1466 } 1459 }
1467 1460
1468 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusAssemblyDependency"); 1461 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusAssemblyDependency");
1469 row[0] = assemblyKey; 1462 row.Set(0, assemblyKey);
1470 row[1] = requiredAssemblyKey; 1463 row.Set(1, requiredAssemblyKey);
1471 } 1464 }
1472 1465
1473 /// <summary> 1466 /// <summary>
@@ -1476,9 +1469,9 @@ namespace WixToolset.Extensions
1476 /// <param name="node">Element to parse.</param> 1469 /// <param name="node">Element to parse.</param>
1477 /// <param name="componentKey">Identifier of parent component.</param> 1470 /// <param name="componentKey">Identifier of parent component.</param>
1478 /// <param name="assemblyKey">Identifier of parent assembly.</param> 1471 /// <param name="assemblyKey">Identifier of parent assembly.</param>
1479 private void ParseComPlusComponentElement(XElement node, string componentKey, string assemblyKey) 1472 private void ParseComPlusComponentElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string assemblyKey)
1480 { 1473 {
1481 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1474 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1482 1475
1483 string key = null; 1476 string key = null;
1484 string clsid = null; 1477 string clsid = null;
@@ -1492,94 +1485,94 @@ namespace WixToolset.Extensions
1492 switch (attrib.Name.LocalName) 1485 switch (attrib.Name.LocalName)
1493 { 1486 {
1494 case "Id": 1487 case "Id":
1495 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1488 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1496 break; 1489 break;
1497 case "CLSID": 1490 case "CLSID":
1498 clsid = "{" + this.Core.GetAttributeValue(sourceLineNumbers, attrib) + "}"; 1491 clsid = "{" + this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib) + "}";
1499 break; 1492 break;
1500 case "AllowInprocSubscribers": 1493 case "AllowInprocSubscribers":
1501 properties["AllowInprocSubscribers"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1494 properties["AllowInprocSubscribers"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1502 break; 1495 break;
1503 case "ComponentAccessChecksEnabled": 1496 case "ComponentAccessChecksEnabled":
1504 properties["ComponentAccessChecksEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1497 properties["ComponentAccessChecksEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1505 break; 1498 break;
1506 case "ComponentTransactionTimeout": 1499 case "ComponentTransactionTimeout":
1507 properties["ComponentTransactionTimeout"] = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, 3600).ToString(); 1500 properties["ComponentTransactionTimeout"] = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, 3600).ToString();
1508 break; 1501 break;
1509 case "ComponentTransactionTimeoutEnabled": 1502 case "ComponentTransactionTimeoutEnabled":
1510 properties["ComponentTransactionTimeoutEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1503 properties["ComponentTransactionTimeoutEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1511 break; 1504 break;
1512 case "COMTIIntrinsics": 1505 case "COMTIIntrinsics":
1513 properties["COMTIIntrinsics"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1506 properties["COMTIIntrinsics"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1514 break; 1507 break;
1515 case "ConstructionEnabled": 1508 case "ConstructionEnabled":
1516 properties["ConstructionEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1509 properties["ConstructionEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1517 break; 1510 break;
1518 case "ConstructorString": 1511 case "ConstructorString":
1519 properties["ConstructorString"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1512 properties["ConstructorString"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1520 break; 1513 break;
1521 case "CreationTimeout": 1514 case "CreationTimeout":
1522 properties["CreationTimeout"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1515 properties["CreationTimeout"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1523 break; 1516 break;
1524 case "Description": 1517 case "Description":
1525 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1518 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1526 break; 1519 break;
1527 case "EventTrackingEnabled": 1520 case "EventTrackingEnabled":
1528 properties["EventTrackingEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1521 properties["EventTrackingEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1529 break; 1522 break;
1530 case "ExceptionClass": 1523 case "ExceptionClass":
1531 properties["ExceptionClass"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1524 properties["ExceptionClass"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1532 break; 1525 break;
1533 case "FireInParallel": 1526 case "FireInParallel":
1534 properties["FireInParallel"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1527 properties["FireInParallel"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1535 break; 1528 break;
1536 case "IISIntrinsics": 1529 case "IISIntrinsics":
1537 properties["IISIntrinsics"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1530 properties["IISIntrinsics"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1538 break; 1531 break;
1539 case "InitializesServerApplication": 1532 case "InitializesServerApplication":
1540 properties["InitializesServerApplication"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1533 properties["InitializesServerApplication"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1541 break; 1534 break;
1542 case "IsEnabled": 1535 case "IsEnabled":
1543 properties["IsEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1536 properties["IsEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1544 break; 1537 break;
1545 case "IsPrivateComponent": 1538 case "IsPrivateComponent":
1546 properties["IsPrivateComponent"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1539 properties["IsPrivateComponent"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1547 break; 1540 break;
1548 case "JustInTimeActivation": 1541 case "JustInTimeActivation":
1549 properties["JustInTimeActivation"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1542 properties["JustInTimeActivation"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1550 break; 1543 break;
1551 case "LoadBalancingSupported": 1544 case "LoadBalancingSupported":
1552 properties["LoadBalancingSupported"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1545 properties["LoadBalancingSupported"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1553 break; 1546 break;
1554 case "MaxPoolSize": 1547 case "MaxPoolSize":
1555 properties["MaxPoolSize"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1548 properties["MaxPoolSize"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1556 break; 1549 break;
1557 case "MinPoolSize": 1550 case "MinPoolSize":
1558 properties["MinPoolSize"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1551 properties["MinPoolSize"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1559 break; 1552 break;
1560 case "MultiInterfacePublisherFilterCLSID": 1553 case "MultiInterfacePublisherFilterCLSID":
1561 properties["MultiInterfacePublisherFilterCLSID"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1554 properties["MultiInterfacePublisherFilterCLSID"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1562 break; 1555 break;
1563 case "MustRunInClientContext": 1556 case "MustRunInClientContext":
1564 properties["MustRunInClientContext"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1557 properties["MustRunInClientContext"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1565 break; 1558 break;
1566 case "MustRunInDefaultContext": 1559 case "MustRunInDefaultContext":
1567 properties["MustRunInDefaultContext"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1560 properties["MustRunInDefaultContext"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1568 break; 1561 break;
1569 case "ObjectPoolingEnabled": 1562 case "ObjectPoolingEnabled":
1570 properties["ObjectPoolingEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1563 properties["ObjectPoolingEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1571 break; 1564 break;
1572 case "PublisherID": 1565 case "PublisherID":
1573 properties["PublisherID"] = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); 1566 properties["PublisherID"] = this.TryFormatGuidValue(this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib));
1574 break; 1567 break;
1575 case "SoapAssemblyName": 1568 case "SoapAssemblyName":
1576 properties["SoapAssemblyName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1569 properties["SoapAssemblyName"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1577 break; 1570 break;
1578 case "SoapTypeName": 1571 case "SoapTypeName":
1579 properties["SoapTypeName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1572 properties["SoapTypeName"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1580 break; 1573 break;
1581 case "Synchronization": 1574 case "Synchronization":
1582 string synchronizationValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1575 string synchronizationValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1583 switch (synchronizationValue) 1576 switch (synchronizationValue)
1584 { 1577 {
1585 case "ignored": 1578 case "ignored":
@@ -1598,12 +1591,12 @@ namespace WixToolset.Extensions
1598 properties["Synchronization"] = "4"; 1591 properties["Synchronization"] = "4";
1599 break; 1592 break;
1600 default: 1593 default:
1601 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "Synchronization", synchronizationValue, "ignored", "none", "supported", "required", "requiresNew")); 1594 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "Synchronization", synchronizationValue, "ignored", "none", "supported", "required", "requiresNew"));
1602 break; 1595 break;
1603 } 1596 }
1604 break; 1597 break;
1605 case "Transaction": 1598 case "Transaction":
1606 string transactionValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1599 string transactionValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1607 switch (transactionValue) 1600 switch (transactionValue)
1608 { 1601 {
1609 case "ignored": 1602 case "ignored":
@@ -1622,12 +1615,12 @@ namespace WixToolset.Extensions
1622 properties["Transaction"] = "4"; 1615 properties["Transaction"] = "4";
1623 break; 1616 break;
1624 default: 1617 default:
1625 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "Transaction", transactionValue, "ignored", "none", "supported", "required", "requiresNew")); 1618 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "Transaction", transactionValue, "ignored", "none", "supported", "required", "requiresNew"));
1626 break; 1619 break;
1627 } 1620 }
1628 break; 1621 break;
1629 case "TxIsolationLevel": 1622 case "TxIsolationLevel":
1630 string txIsolationLevelValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1623 string txIsolationLevelValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1631 switch (txIsolationLevelValue) 1624 switch (txIsolationLevelValue)
1632 { 1625 {
1633 case "any": 1626 case "any":
@@ -1646,18 +1639,18 @@ namespace WixToolset.Extensions
1646 properties["TxIsolationLevel"] = "4"; 1639 properties["TxIsolationLevel"] = "4";
1647 break; 1640 break;
1648 default: 1641 default:
1649 this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "TxIsolationLevel", txIsolationLevelValue, "any", "readUnCommitted", "readCommitted", "repeatableRead", "serializable")); 1642 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "TxIsolationLevel", txIsolationLevelValue, "any", "readUnCommitted", "readCommitted", "repeatableRead", "serializable"));
1650 break; 1643 break;
1651 } 1644 }
1652 break; 1645 break;
1653 default: 1646 default:
1654 this.Core.UnexpectedAttribute(node, attrib); 1647 this.ParseHelper.UnexpectedAttribute(node, attrib);
1655 break; 1648 break;
1656 } 1649 }
1657 } 1650 }
1658 else 1651 else
1659 { 1652 {
1660 this.Core.ParseExtensionAttribute(node, attrib); 1653 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1661 } 1654 }
1662 } 1655 }
1663 1656
@@ -1668,37 +1661,37 @@ namespace WixToolset.Extensions
1668 switch (child.Name.LocalName) 1661 switch (child.Name.LocalName)
1669 { 1662 {
1670 case "ComPlusRoleForComponent": 1663 case "ComPlusRoleForComponent":
1671 this.ParseComPlusRoleForComponentElement(child, componentKey, key); 1664 this.ParseComPlusRoleForComponentElement(intermediate, section, child, componentKey, key);
1672 break; 1665 break;
1673 case "ComPlusInterface": 1666 case "ComPlusInterface":
1674 this.ParseComPlusInterfaceElement(child, componentKey, key); 1667 this.ParseComPlusInterfaceElement(intermediate, section, child, componentKey, key);
1675 break; 1668 break;
1676 case "ComPlusSubscription": 1669 case "ComPlusSubscription":
1677 this.ParseComPlusSubscriptionElement(child, componentKey, key); 1670 this.ParseComPlusSubscriptionElement(intermediate, section, child, componentKey, key);
1678 break; 1671 break;
1679 default: 1672 default:
1680 this.Core.UnexpectedElement(node, child); 1673 this.ParseHelper.UnexpectedElement(node, child);
1681 break; 1674 break;
1682 } 1675 }
1683 } 1676 }
1684 else 1677 else
1685 { 1678 {
1686 this.Core.ParseExtensionElement(node, child); 1679 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
1687 } 1680 }
1688 } 1681 }
1689 1682
1690 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusComponent"); 1683 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusComponent");
1691 row[0] = key; 1684 row.Set(0, key);
1692 row[1] = assemblyKey; 1685 row.Set(1, assemblyKey);
1693 row[2] = clsid; 1686 row.Set(2, clsid);
1694 1687
1695 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 1688 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
1696 while (propertiesEnumerator.MoveNext()) 1689 while (propertiesEnumerator.MoveNext())
1697 { 1690 {
1698 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusComponentProperty"); 1691 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusComponentProperty");
1699 propertyRow[0] = key; 1692 propertyRow.Set(0, key);
1700 propertyRow[1] = (string)propertiesEnumerator.Key; 1693 propertyRow.Set(1, (string)propertiesEnumerator.Key);
1701 propertyRow[2] = (string)propertiesEnumerator.Value; 1694 propertyRow.Set(2, (string)propertiesEnumerator.Value);
1702 } 1695 }
1703 } 1696 }
1704 1697
@@ -1708,9 +1701,9 @@ namespace WixToolset.Extensions
1708 /// <param name="node">Element to parse.</param> 1701 /// <param name="node">Element to parse.</param>
1709 /// <param name="componentKey">Identifier of parent component.</param> 1702 /// <param name="componentKey">Identifier of parent component.</param>
1710 /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param> 1703 /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param>
1711 private void ParseComPlusRoleForComponentElement(XElement node, string componentKey, string cpcomponentKey) 1704 private void ParseComPlusRoleForComponentElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string cpcomponentKey)
1712 { 1705 {
1713 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1706 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1714 1707
1715 string key = null; 1708 string key = null;
1716 string applicationRoleKey = null; 1709 string applicationRoleKey = null;
@@ -1722,40 +1715,40 @@ namespace WixToolset.Extensions
1722 switch (attrib.Name.LocalName) 1715 switch (attrib.Name.LocalName)
1723 { 1716 {
1724 case "Id": 1717 case "Id":
1725 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1718 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1726 break; 1719 break;
1727 case "Component": 1720 case "Component":
1728 if (null != cpcomponentKey) 1721 if (null != cpcomponentKey)
1729 { 1722 {
1730 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1723 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1731 } 1724 }
1732 cpcomponentKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1725 cpcomponentKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1733 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusComponent", cpcomponentKey); 1726 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusComponent", cpcomponentKey);
1734 break; 1727 break;
1735 case "ApplicationRole": 1728 case "ApplicationRole":
1736 applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1729 applicationRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1737 break; 1730 break;
1738 default: 1731 default:
1739 this.Core.UnexpectedAttribute(node, attrib); 1732 this.ParseHelper.UnexpectedAttribute(node, attrib);
1740 break; 1733 break;
1741 } 1734 }
1742 } 1735 }
1743 else 1736 else
1744 { 1737 {
1745 this.Core.ParseExtensionAttribute(node, attrib); 1738 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1746 } 1739 }
1747 } 1740 }
1748 1741
1749 if (null == cpcomponentKey) 1742 if (null == cpcomponentKey)
1750 { 1743 {
1751 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Component")); 1744 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Component"));
1752 } 1745 }
1753 1746
1754 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusRoleForComponent"); 1747 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusRoleForComponent");
1755 row[0] = key; 1748 row.Set(0, key);
1756 row[1] = cpcomponentKey; 1749 row.Set(1, cpcomponentKey);
1757 row[2] = applicationRoleKey; 1750 row.Set(2, applicationRoleKey);
1758 row[3] = componentKey; 1751 row.Set(3, componentKey);
1759 } 1752 }
1760 1753
1761 /// <summary> 1754 /// <summary>
@@ -1764,9 +1757,9 @@ namespace WixToolset.Extensions
1764 /// <param name="node">Element to parse.</param> 1757 /// <param name="node">Element to parse.</param>
1765 /// <param name="componentKey">Identifier of parent component.</param> 1758 /// <param name="componentKey">Identifier of parent component.</param>
1766 /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param> 1759 /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param>
1767 private void ParseComPlusInterfaceElement(XElement node, string componentKey, string cpcomponentKey) 1760 private void ParseComPlusInterfaceElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string cpcomponentKey)
1768 { 1761 {
1769 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1762 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1770 1763
1771 // parse attributes 1764 // parse attributes
1772 string key = null; 1765 string key = null;
@@ -1781,25 +1774,25 @@ namespace WixToolset.Extensions
1781 switch (attrib.Name.LocalName) 1774 switch (attrib.Name.LocalName)
1782 { 1775 {
1783 case "Id": 1776 case "Id":
1784 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1777 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1785 break; 1778 break;
1786 case "IID": 1779 case "IID":
1787 iid = "{" + this.Core.GetAttributeValue(sourceLineNumbers, attrib) + "}"; 1780 iid = "{" + this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib) + "}";
1788 break; 1781 break;
1789 case "Description": 1782 case "Description":
1790 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1783 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1791 break; 1784 break;
1792 case "QueuingEnabled": 1785 case "QueuingEnabled":
1793 properties["QueuingEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1786 properties["QueuingEnabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1794 break; 1787 break;
1795 default: 1788 default:
1796 this.Core.UnexpectedAttribute(node, attrib); 1789 this.ParseHelper.UnexpectedAttribute(node, attrib);
1797 break; 1790 break;
1798 } 1791 }
1799 } 1792 }
1800 else 1793 else
1801 { 1794 {
1802 this.Core.ParseExtensionAttribute(node, attrib); 1795 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1803 } 1796 }
1804 } 1797 }
1805 1798
@@ -1810,34 +1803,34 @@ namespace WixToolset.Extensions
1810 switch (child.Name.LocalName) 1803 switch (child.Name.LocalName)
1811 { 1804 {
1812 case "ComPlusRoleForInterface": 1805 case "ComPlusRoleForInterface":
1813 this.ParseComPlusRoleForInterfaceElement(child, componentKey, key); 1806 this.ParseComPlusRoleForInterfaceElement(intermediate, section, child, componentKey, key);
1814 break; 1807 break;
1815 case "ComPlusMethod": 1808 case "ComPlusMethod":
1816 this.ParseComPlusMethodElement(child, componentKey, key); 1809 this.ParseComPlusMethodElement(intermediate, section, child, componentKey, key);
1817 break; 1810 break;
1818 default: 1811 default:
1819 this.Core.UnexpectedElement(node, child); 1812 this.ParseHelper.UnexpectedElement(node, child);
1820 break; 1813 break;
1821 } 1814 }
1822 } 1815 }
1823 else 1816 else
1824 { 1817 {
1825 this.Core.ParseExtensionElement(node, child); 1818 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
1826 } 1819 }
1827 } 1820 }
1828 1821
1829 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusInterface"); 1822 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusInterface");
1830 row[0] = key; 1823 row.Set(0, key);
1831 row[1] = cpcomponentKey; 1824 row.Set(1, cpcomponentKey);
1832 row[2] = iid; 1825 row.Set(2, iid);
1833 1826
1834 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 1827 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
1835 while (propertiesEnumerator.MoveNext()) 1828 while (propertiesEnumerator.MoveNext())
1836 { 1829 {
1837 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusInterfaceProperty"); 1830 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusInterfaceProperty");
1838 propertyRow[0] = key; 1831 propertyRow.Set(0, key);
1839 propertyRow[1] = (string)propertiesEnumerator.Key; 1832 propertyRow.Set(1, (string)propertiesEnumerator.Key);
1840 propertyRow[2] = (string)propertiesEnumerator.Value; 1833 propertyRow.Set(2, (string)propertiesEnumerator.Value);
1841 } 1834 }
1842 } 1835 }
1843 1836
@@ -1847,9 +1840,9 @@ namespace WixToolset.Extensions
1847 /// <param name="node">Element to parse.</param> 1840 /// <param name="node">Element to parse.</param>
1848 /// <param name="componentKey">Identifier of parent component.</param> 1841 /// <param name="componentKey">Identifier of parent component.</param>
1849 /// <param name="interfaceKey">Identifier of parent interface.</param> 1842 /// <param name="interfaceKey">Identifier of parent interface.</param>
1850 private void ParseComPlusRoleForInterfaceElement(XElement node, string componentKey, string interfaceKey) 1843 private void ParseComPlusRoleForInterfaceElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string interfaceKey)
1851 { 1844 {
1852 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1845 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1853 1846
1854 string key = null; 1847 string key = null;
1855 string applicationRoleKey = null; 1848 string applicationRoleKey = null;
@@ -1861,40 +1854,40 @@ namespace WixToolset.Extensions
1861 switch (attrib.Name.LocalName) 1854 switch (attrib.Name.LocalName)
1862 { 1855 {
1863 case "Id": 1856 case "Id":
1864 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1857 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1865 break; 1858 break;
1866 case "Interface": 1859 case "Interface":
1867 if (null != interfaceKey) 1860 if (null != interfaceKey)
1868 { 1861 {
1869 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1862 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1870 } 1863 }
1871 interfaceKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1864 interfaceKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1872 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusInterface", interfaceKey); 1865 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusInterface", interfaceKey);
1873 break; 1866 break;
1874 case "ApplicationRole": 1867 case "ApplicationRole":
1875 applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1868 applicationRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1876 break; 1869 break;
1877 default: 1870 default:
1878 this.Core.UnexpectedAttribute(node, attrib); 1871 this.ParseHelper.UnexpectedAttribute(node, attrib);
1879 break; 1872 break;
1880 } 1873 }
1881 } 1874 }
1882 else 1875 else
1883 { 1876 {
1884 this.Core.ParseExtensionAttribute(node, attrib); 1877 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1885 } 1878 }
1886 } 1879 }
1887 1880
1888 if (null == interfaceKey) 1881 if (null == interfaceKey)
1889 { 1882 {
1890 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Interface")); 1883 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Interface"));
1891 } 1884 }
1892 1885
1893 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusRoleForInterface"); 1886 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusRoleForInterface");
1894 row[0] = key; 1887 row.Set(0, key);
1895 row[1] = interfaceKey; 1888 row.Set(1, interfaceKey);
1896 row[2] = applicationRoleKey; 1889 row.Set(2, applicationRoleKey);
1897 row[3] = componentKey; 1890 row.Set(3, componentKey);
1898 } 1891 }
1899 1892
1900 /// <summary> 1893 /// <summary>
@@ -1903,9 +1896,9 @@ namespace WixToolset.Extensions
1903 /// <param name="node">Element to parse.</param> 1896 /// <param name="node">Element to parse.</param>
1904 /// <param name="componentKey">Identifier of parent component.</param> 1897 /// <param name="componentKey">Identifier of parent component.</param>
1905 /// <param name="interfaceKey">Identifier of parent interface.</param> 1898 /// <param name="interfaceKey">Identifier of parent interface.</param>
1906 private void ParseComPlusMethodElement(XElement node, string componentKey, string interfaceKey) 1899 private void ParseComPlusMethodElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string interfaceKey)
1907 { 1900 {
1908 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1901 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
1909 1902
1910 string key = null; 1903 string key = null;
1911 int index = CompilerConstants.IntegerNotSet; 1904 int index = CompilerConstants.IntegerNotSet;
@@ -1920,28 +1913,28 @@ namespace WixToolset.Extensions
1920 switch (attrib.Name.LocalName) 1913 switch (attrib.Name.LocalName)
1921 { 1914 {
1922 case "Id": 1915 case "Id":
1923 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1916 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1924 break; 1917 break;
1925 case "Index": 1918 case "Index":
1926 index = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue); 1919 index = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue);
1927 break; 1920 break;
1928 case "Name": 1921 case "Name":
1929 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1922 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1930 break; 1923 break;
1931 case "AutoComplete": 1924 case "AutoComplete":
1932 properties["AutoComplete"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 1925 properties["AutoComplete"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
1933 break; 1926 break;
1934 case "Description": 1927 case "Description":
1935 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1928 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1936 break; 1929 break;
1937 default: 1930 default:
1938 this.Core.UnexpectedAttribute(node, attrib); 1931 this.ParseHelper.UnexpectedAttribute(node, attrib);
1939 break; 1932 break;
1940 } 1933 }
1941 } 1934 }
1942 else 1935 else
1943 { 1936 {
1944 this.Core.ParseExtensionAttribute(node, attrib); 1937 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
1945 } 1938 }
1946 } 1939 }
1947 1940
@@ -1952,40 +1945,40 @@ namespace WixToolset.Extensions
1952 switch (child.Name.LocalName) 1945 switch (child.Name.LocalName)
1953 { 1946 {
1954 case "ComPlusRoleForMethod": 1947 case "ComPlusRoleForMethod":
1955 this.ParseComPlusRoleForMethodElement(child, componentKey, key); 1948 this.ParseComPlusRoleForMethodElement(intermediate, section, child, componentKey, key);
1956 break; 1949 break;
1957 default: 1950 default:
1958 this.Core.UnexpectedElement(node, child); 1951 this.ParseHelper.UnexpectedElement(node, child);
1959 break; 1952 break;
1960 } 1953 }
1961 } 1954 }
1962 else 1955 else
1963 { 1956 {
1964 this.Core.ParseExtensionElement(node, child); 1957 this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child);
1965 } 1958 }
1966 } 1959 }
1967 1960
1968 if (CompilerConstants.IntegerNotSet == index && null == name) 1961 if (CompilerConstants.IntegerNotSet == index && null == name)
1969 { 1962 {
1970 this.Core.OnMessage(ComPlusErrors.RequiredAttribute(sourceLineNumbers, node.Name.LocalName, "Index", "Name")); 1963 this.Messaging.Write(ComPlusErrors.RequiredAttribute(sourceLineNumbers, node.Name.LocalName, "Index", "Name"));
1971 } 1964 }
1972 1965
1973 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusMethod"); 1966 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusMethod");
1974 row[0] = key; 1967 row.Set(0, key);
1975 row[1] = interfaceKey; 1968 row.Set(1, interfaceKey);
1976 if (CompilerConstants.IntegerNotSet != index) 1969 if (CompilerConstants.IntegerNotSet != index)
1977 { 1970 {
1978 row[2] = index; 1971 row.Set(2, index);
1979 } 1972 }
1980 row[3] = name; 1973 row.Set(3, name);
1981 1974
1982 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 1975 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
1983 while (propertiesEnumerator.MoveNext()) 1976 while (propertiesEnumerator.MoveNext())
1984 { 1977 {
1985 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusMethodProperty"); 1978 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusMethodProperty");
1986 propertyRow[0] = key; 1979 propertyRow.Set(0, key);
1987 propertyRow[1] = (string)propertiesEnumerator.Key; 1980 propertyRow.Set(1, (string)propertiesEnumerator.Key);
1988 propertyRow[2] = (string)propertiesEnumerator.Value; 1981 propertyRow.Set(2, (string)propertiesEnumerator.Value);
1989 } 1982 }
1990 } 1983 }
1991 1984
@@ -1995,9 +1988,9 @@ namespace WixToolset.Extensions
1995 /// <param name="node">Element to parse.</param> 1988 /// <param name="node">Element to parse.</param>
1996 /// <param name="componentKey">Identifier of parent component.</param> 1989 /// <param name="componentKey">Identifier of parent component.</param>
1997 /// <param name="methodKey">Identifier of parent method.</param> 1990 /// <param name="methodKey">Identifier of parent method.</param>
1998 private void ParseComPlusRoleForMethodElement(XElement node, string componentKey, string methodKey) 1991 private void ParseComPlusRoleForMethodElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string methodKey)
1999 { 1992 {
2000 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1993 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
2001 1994
2002 string key = null; 1995 string key = null;
2003 string applicationRoleKey = null; 1996 string applicationRoleKey = null;
@@ -2009,40 +2002,40 @@ namespace WixToolset.Extensions
2009 switch (attrib.Name.LocalName) 2002 switch (attrib.Name.LocalName)
2010 { 2003 {
2011 case "Id": 2004 case "Id":
2012 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2005 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2013 break; 2006 break;
2014 case "Method": 2007 case "Method":
2015 if (null != methodKey) 2008 if (null != methodKey)
2016 { 2009 {
2017 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 2010 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
2018 } 2011 }
2019 methodKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2012 methodKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2020 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusMethod", methodKey); 2013 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusMethod", methodKey);
2021 break; 2014 break;
2022 case "ApplicationRole": 2015 case "ApplicationRole":
2023 applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2016 applicationRoleKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2024 break; 2017 break;
2025 default: 2018 default:
2026 this.Core.UnexpectedAttribute(node, attrib); 2019 this.ParseHelper.UnexpectedAttribute(node, attrib);
2027 break; 2020 break;
2028 } 2021 }
2029 } 2022 }
2030 else 2023 else
2031 { 2024 {
2032 this.Core.ParseExtensionAttribute(node, attrib); 2025 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
2033 } 2026 }
2034 } 2027 }
2035 2028
2036 if (null == methodKey) 2029 if (null == methodKey)
2037 { 2030 {
2038 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Method")); 2031 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Method"));
2039 } 2032 }
2040 2033
2041 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusRoleForMethod"); 2034 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusRoleForMethod");
2042 row[0] = key; 2035 row.Set(0, key);
2043 row[1] = methodKey; 2036 row.Set(1, methodKey);
2044 row[2] = applicationRoleKey; 2037 row.Set(2, applicationRoleKey);
2045 row[3] = componentKey; 2038 row.Set(3, componentKey);
2046 } 2039 }
2047 2040
2048 /// <summary> 2041 /// <summary>
@@ -2051,9 +2044,9 @@ namespace WixToolset.Extensions
2051 /// <param name="node">Element to parse.</param> 2044 /// <param name="node">Element to parse.</param>
2052 /// <param name="componentKey">Identifier of parent component.</param> 2045 /// <param name="componentKey">Identifier of parent component.</param>
2053 /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param> 2046 /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param>
2054 private void ParseComPlusSubscriptionElement(XElement node, string componentKey, string cpcomponentKey) 2047 private void ParseComPlusSubscriptionElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentKey, string cpcomponentKey)
2055 { 2048 {
2056 SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 2049 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
2057 2050
2058 string key = null; 2051 string key = null;
2059 string id = null; 2052 string id = null;
@@ -2070,95 +2063,95 @@ namespace WixToolset.Extensions
2070 switch (attrib.Name.LocalName) 2063 switch (attrib.Name.LocalName)
2071 { 2064 {
2072 case "Id": 2065 case "Id":
2073 key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2066 key = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2074 break; 2067 break;
2075 case "Component": 2068 case "Component":
2076 if (null != cpcomponentKey) 2069 if (null != cpcomponentKey)
2077 { 2070 {
2078 this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 2071 this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
2079 } 2072 }
2080 cpcomponentKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2073 cpcomponentKey = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2081 this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusComponent", cpcomponentKey); 2074 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "ComPlusComponent", cpcomponentKey);
2082 break; 2075 break;
2083 case "SubscriptionId": 2076 case "SubscriptionId":
2084 id = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); 2077 id = this.TryFormatGuidValue(this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib));
2085 break; 2078 break;
2086 case "Name": 2079 case "Name":
2087 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2080 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2088 break; 2081 break;
2089 case "EventCLSID": 2082 case "EventCLSID":
2090 eventCLSID = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2083 eventCLSID = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2091 break; 2084 break;
2092 case "PublisherID": 2085 case "PublisherID":
2093 publisherID = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); 2086 publisherID = this.TryFormatGuidValue(this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib));
2094 break; 2087 break;
2095 case "Description": 2088 case "Description":
2096 properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2089 properties["Description"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2097 break; 2090 break;
2098 case "Enabled": 2091 case "Enabled":
2099 properties["Enabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 2092 properties["Enabled"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
2100 break; 2093 break;
2101 case "EventClassPartitionID": 2094 case "EventClassPartitionID":
2102 properties["EventClassPartitionID"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2095 properties["EventClassPartitionID"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2103 break; 2096 break;
2104 case "FilterCriteria": 2097 case "FilterCriteria":
2105 properties["FilterCriteria"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2098 properties["FilterCriteria"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2106 break; 2099 break;
2107 case "InterfaceID": 2100 case "InterfaceID":
2108 properties["InterfaceID"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2101 properties["InterfaceID"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2109 break; 2102 break;
2110 case "MachineName": 2103 case "MachineName":
2111 properties["MachineName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2104 properties["MachineName"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2112 break; 2105 break;
2113 case "MethodName": 2106 case "MethodName":
2114 properties["MethodName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2107 properties["MethodName"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2115 break; 2108 break;
2116 case "PerUser": 2109 case "PerUser":
2117 properties["PerUser"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 2110 properties["PerUser"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
2118 break; 2111 break;
2119 case "Queued": 2112 case "Queued":
2120 properties["Queued"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; 2113 properties["Queued"] = YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0";
2121 break; 2114 break;
2122 case "SubscriberMoniker": 2115 case "SubscriberMoniker":
2123 properties["SubscriberMoniker"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2116 properties["SubscriberMoniker"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2124 break; 2117 break;
2125 case "UserName": 2118 case "UserName":
2126 properties["UserName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 2119 properties["UserName"] = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
2127 break; 2120 break;
2128 default: 2121 default:
2129 this.Core.UnexpectedAttribute(node, attrib); 2122 this.ParseHelper.UnexpectedAttribute(node, attrib);
2130 break; 2123 break;
2131 } 2124 }
2132 } 2125 }
2133 else 2126 else
2134 { 2127 {
2135 this.Core.ParseExtensionAttribute(node, attrib); 2128 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib);
2136 } 2129 }
2137 } 2130 }
2138 2131
2139 if (null == cpcomponentKey) 2132 if (null == cpcomponentKey)
2140 { 2133 {
2141 this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Component")); 2134 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Component"));
2142 } 2135 }
2143 2136
2144 this.Core.ParseForExtensionElements(node); 2137 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, node);
2145 2138
2146 Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusSubscription"); 2139 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusSubscription");
2147 row[0] = key; 2140 row.Set(0, key);
2148 row[1] = cpcomponentKey; 2141 row.Set(1, cpcomponentKey);
2149 row[2] = componentKey; 2142 row.Set(2, componentKey);
2150 row[3] = id; 2143 row.Set(3, id);
2151 row[4] = name; 2144 row.Set(4, name);
2152 row[5] = eventCLSID; 2145 row.Set(5, eventCLSID);
2153 row[6] = publisherID; 2146 row.Set(6, publisherID);
2154 2147
2155 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); 2148 IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator();
2156 while (propertiesEnumerator.MoveNext()) 2149 while (propertiesEnumerator.MoveNext())
2157 { 2150 {
2158 Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusSubscriptionProperty"); 2151 var propertyRow = this.ParseHelper.CreateRow(section, sourceLineNumbers, "ComPlusSubscriptionProperty");
2159 propertyRow[0] = key; 2152 propertyRow.Set(0, key);
2160 propertyRow[1] = (string)propertiesEnumerator.Key; 2153 propertyRow.Set(1, (string)propertiesEnumerator.Key);
2161 propertyRow[2] = (string)propertiesEnumerator.Value; 2154 propertyRow.Set(2, (string)propertiesEnumerator.Value);
2162 } 2155 }
2163 } 2156 }
2164 2157
diff --git a/src/wixext/ComPlusDecompiler.cs b/src/wixext/ComPlusDecompiler.cs
index 27f1653e..6da2df94 100644
--- a/src/wixext/ComPlusDecompiler.cs
+++ b/src/wixext/ComPlusDecompiler.cs
@@ -1,7 +1,8 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 2
3namespace WixToolset.Extensions 3namespace WixToolset.ComPlus
4{ 4{
5#if TODO_CONSIDER_DECOMPILER
5 using System; 6 using System;
6 using System.Collections; 7 using System.Collections;
7 using System.Globalization; 8 using System.Globalization;
@@ -1840,4 +1841,5 @@ namespace WixToolset.Extensions
1840 } 1841 }
1841 } 1842 }
1842 } 1843 }
1844#endif
1843} 1845}
diff --git a/src/wixext/ComPlusErrors.cs b/src/wixext/ComPlusErrors.cs
new file mode 100644
index 00000000..91b41679
--- /dev/null
+++ b/src/wixext/ComPlusErrors.cs
@@ -0,0 +1,72 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using System;
6 using System.Resources;
7 using WixToolset.Data;
8
9 public static class ComPlusErrors
10 {
11 public static Message IllegalAttributeWithoutComponent(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
12 {
13 return Message(sourceLineNumbers, Ids.IllegalAttributeWithoutComponent, "The {0}/@{1} attribute cannot be specified unless the element has a component as an ancestor. A {0} that does not have a component ancestor is not installed.", elementName, attributeName);
14 }
15
16 public static Message IllegalElementWithoutComponent(SourceLineNumber sourceLineNumbers, string elementName)
17 {
18 return Message(sourceLineNumbers, Ids.IllegalElementWithoutComponent, "The {0} element cannot be specified unless the element has a component as an ancestor. A {0} that does not have a component ancestor is not installed.", elementName);
19 }
20
21 public static Message RequiredAttribute(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2)
22 {
23 return Message(sourceLineNumbers, Ids.RequiredAttribute, "A {0} element must have either a {1} attribute or a {2} attribute, or both set.", elementName, attributeName1, attributeName2);
24 }
25
26 public static Message RequiredAttributeNotUnderComponent(SourceLineNumber sourceLineNumbers, string elementName, string attributeName1, string attributeName2)
27 {
28 return Message(sourceLineNumbers, Ids.RequiredAttributeNotUnderComponent, "A {0} element not nested under a component must have either a {1} attribute or a {2} attribute, or both set.", elementName, attributeName1, attributeName2);
29 }
30
31 public static Message RequiredAttributeUnderComponent(SourceLineNumber sourceLineNumbers, string elementName, string attributeName)
32 {
33 return Message(sourceLineNumbers, Ids.RequiredAttributeUnderComponent, "The {0}/@{1} attribute must be provided when {0} element is nested under a component.", elementName, attributeName);
34 }
35
36 public static Message UnexpectedAttributeWithOtherValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName, string otherValue)
37 {
38 return Message(sourceLineNumbers, Ids.UnexpectedAttributeWithOtherValue, "The {0}/@{1} attribute cannot coexist with the {2} attribute's value of '{3}'.", elementName, attributeName, otherAttributeName, otherValue);
39 }
40
41 public static Message UnexpectedAttributeWithOtherValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string otherAttributeName, string otherValue)
42 {
43 return Message(sourceLineNumbers, Ids.UnexpectedAttributeWithOtherValue, "The {0}/@{1} attribute's value, '{2}', cannot coexist with the {3} attribute's value of '{4}'.", elementName, attributeName, value, otherAttributeName, otherValue);
44 }
45
46 public static Message UnexpectedAttributeWithoutOtherValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string otherAttributeName, string otherValue)
47 {
48 return Message(sourceLineNumbers, Ids.UnexpectedAttributeWithoutOtherValue, "The {0}/@{1} cannot be provided unless the {2} attribute is provided with a value of '{3}'.", elementName, attributeName, otherAttributeName, otherValue);
49 }
50
51 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args)
52 {
53 return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args);
54 }
55
56 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, ResourceManager resourceManager, string resourceName, params object[] args)
57 {
58 return new Message(sourceLineNumber, MessageLevel.Error, (int)id, resourceManager, resourceName, args);
59 }
60
61 public enum Ids
62 {
63 IllegalAttributeWithoutComponent = 6000,
64 IllegalElementWithoutComponent = 6001,
65 UnexpectedAttributeWithOtherValue = 6002,
66 UnexpectedAttributeWithoutOtherValue = 6003,
67 RequiredAttributeUnderComponent = 6004,
68 RequiredAttribute = 6005,
69 RequiredAttributeNotUnderComponent = 6006,
70 }
71 }
72}
diff --git a/src/wixext/ComPlusExtensionData.cs b/src/wixext/ComPlusExtensionData.cs
index cedc2474..954e89f6 100644
--- a/src/wixext/ComPlusExtensionData.cs
+++ b/src/wixext/ComPlusExtensionData.cs
@@ -1,64 +1,30 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. 1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 2
3namespace WixToolset.Extensions 3namespace WixToolset.ComPlus
4{ 4{
5 using System;
6 using System.Reflection;
7 using WixToolset.Data; 5 using WixToolset.Data;
8 using WixToolset.Extensibility; 6 using WixToolset.Extensibility;
9 7
10 /// <summary> 8 /// <summary>
11 /// The WiX Toolset COM+ Extension. 9 /// The WiX Toolset COM+ Extension.
12 /// </summary> 10 /// </summary>
13 public sealed class ComPlusExtensionData : ExtensionData 11 public sealed class ComPlusExtensionData : BaseExtensionData
14 { 12 {
15 /// <summary> 13 /// <summary>
16 /// Gets the default culture. 14 /// Gets the default culture.
17 /// </summary> 15 /// </summary>
18 /// <value>The default culture.</value> 16 /// <value>The default culture.</value>
19 public override string DefaultCulture 17 public override string DefaultCulture => "en-US";
20 {
21 get { return "en-us"; }
22 }
23
24 /// <summary>
25 /// Gets the optional table definitions for this extension.
26 /// </summary>
27 /// <value>The optional table definitions for this extension.</value>
28 public override TableDefinitionCollection TableDefinitions
29 {
30 get
31 {
32 return ComPlusExtensionData.GetExtensionTableDefinitions();
33 }
34 }
35
36 /// <summary>
37 /// Gets the library associated with this extension.
38 /// </summary>
39 /// <param name="tableDefinitions">The table definitions to use while loading the library.</param>
40 /// <returns>The loaded library.</returns>
41 public override Library GetLibrary(TableDefinitionCollection tableDefinitions)
42 {
43 return ComPlusExtensionData.GetExtensionLibrary(tableDefinitions);
44 }
45 18
46 /// <summary> 19 public override bool TryGetTupleDefinitionByName(string name, out IntermediateTupleDefinition tupleDefinition)
47 /// Internal mechanism to access the extension's table definitions.
48 /// </summary>
49 /// <returns>Extension's table definitions.</returns>
50 internal static TableDefinitionCollection GetExtensionTableDefinitions()
51 { 20 {
52 return ExtensionData.LoadTableDefinitionHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.tables.xml"); 21 tupleDefinition = ComPlusTupleDefinitions.ByName(name);
22 return tupleDefinition != null;
53 } 23 }
54 24
55 /// <summary> 25 public override Intermediate GetLibrary(ITupleDefinitionCreator tupleDefinitions)
56 /// Internal mechanism to access the extension's library.
57 /// </summary>
58 /// <returns>Extension's library.</returns>
59 internal static Library GetExtensionLibrary(TableDefinitionCollection tableDefinitions)
60 { 26 {
61 return ExtensionData.LoadLibraryHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.complus.wixlib", tableDefinitions); 27 return Intermediate.Load(typeof(ComPlusExtensionData).Assembly, "WixToolset.ComPlus.complus.wixlib", tupleDefinitions);
62 } 28 }
63 } 29 }
64} 30}
diff --git a/src/wixext/ComPlusExtensionFactory.cs b/src/wixext/ComPlusExtensionFactory.cs
new file mode 100644
index 00000000..d9405867
--- /dev/null
+++ b/src/wixext/ComPlusExtensionFactory.cs
@@ -0,0 +1,18 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using System;
6 using System.Collections.Generic;
7 using WixToolset.Extensibility;
8
9 public class ComPlusExtensionFactory : BaseExtensionFactory
10 {
11 protected override IEnumerable<Type> ExtensionTypes => new[]
12 {
13 typeof(ComPlusCompiler),
14 typeof(ComPlusExtensionData),
15 typeof(ComPlusWindowsInstallerBackendBinderExtension),
16 };
17 }
18}
diff --git a/src/wixext/ComPlusWarnings.cs b/src/wixext/ComPlusWarnings.cs
new file mode 100644
index 00000000..e0000918
--- /dev/null
+++ b/src/wixext/ComPlusWarnings.cs
@@ -0,0 +1,31 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using System;
6 using System.Resources;
7 using WixToolset.Data;
8
9 public static class ComPlusWarnings
10 {
11 public static Message MissingComponents(SourceLineNumber sourceLineNumbers)
12 {
13 return Message(sourceLineNumbers, Ids.MissingComponents, "The ComPlusAssembly element has a Type attribute with a value of 'native', but the element does not contain any ComPlusComponent elements. All components contained in a native assembly must be listed, or they will not be correctly removed during uninstall.");
14 }
15
16 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args)
17 {
18 return new Message(sourceLineNumber, MessageLevel.Warning, (int)id, format, args);
19 }
20
21 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, ResourceManager resourceManager, string resourceName, params object[] args)
22 {
23 return new Message(sourceLineNumber, MessageLevel.Warning, (int)id, resourceManager, resourceName, args);
24 }
25
26 public enum Ids
27 {
28 MissingComponents = 6007,
29 }
30 }
31}
diff --git a/src/wixext/ComPlusWindowsInstallerBackendBinderExtension.cs b/src/wixext/ComPlusWindowsInstallerBackendBinderExtension.cs
new file mode 100644
index 00000000..b00add9e
--- /dev/null
+++ b/src/wixext/ComPlusWindowsInstallerBackendBinderExtension.cs
@@ -0,0 +1,26 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using System.Linq;
6 using System.Xml;
7 using WixToolset.Data.WindowsInstaller;
8 using WixToolset.Extensibility;
9
10 public class ComPlusWindowsInstallerBackendBinderExtension : BaseWindowsInstallerBackendBinderExtension
11 {
12 private static readonly TableDefinition[] Tables = LoadTables();
13
14 protected override TableDefinition[] TableDefinitionsForTuples => Tables;
15
16 private static TableDefinition[] LoadTables()
17 {
18 using (var resourceStream = typeof(ComPlusWindowsInstallerBackendBinderExtension).Assembly.GetManifestResourceStream("WixToolset.ComPlus.tables.xml"))
19 using (var reader = XmlReader.Create(resourceStream))
20 {
21 var tables = TableDefinitionCollection.Load(reader);
22 return tables.ToArray();
23 }
24 }
25 }
26}
diff --git a/src/wixext/Tuples/ComPlusApplicationPropertyTuple.cs b/src/wixext/Tuples/ComPlusApplicationPropertyTuple.cs
new file mode 100644
index 00000000..2582d323
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusApplicationPropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusApplicationProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusApplicationProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusApplicationPropertyTupleFields.Application_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusApplicationPropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusApplicationPropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusApplicationPropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusApplicationPropertyTupleFields
27 {
28 Application_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusApplicationPropertyTuple : IntermediateTuple
34 {
35 public ComPlusApplicationPropertyTuple() : base(ComPlusTupleDefinitions.ComPlusApplicationProperty, null, null)
36 {
37 }
38
39 public ComPlusApplicationPropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusApplicationProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusApplicationPropertyTupleFields index] => this.Fields[(int)index];
44
45 public string Application_
46 {
47 get => this.Fields[(int)ComPlusApplicationPropertyTupleFields.Application_].AsString();
48 set => this.Set((int)ComPlusApplicationPropertyTupleFields.Application_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusApplicationPropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusApplicationPropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusApplicationPropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusApplicationPropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusApplicationRolePropertyTuple.cs b/src/wixext/Tuples/ComPlusApplicationRolePropertyTuple.cs
new file mode 100644
index 00000000..98eee7f8
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusApplicationRolePropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusApplicationRoleProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusApplicationRoleProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusApplicationRolePropertyTupleFields.ApplicationRole_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusApplicationRolePropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusApplicationRolePropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusApplicationRolePropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusApplicationRolePropertyTupleFields
27 {
28 ApplicationRole_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusApplicationRolePropertyTuple : IntermediateTuple
34 {
35 public ComPlusApplicationRolePropertyTuple() : base(ComPlusTupleDefinitions.ComPlusApplicationRoleProperty, null, null)
36 {
37 }
38
39 public ComPlusApplicationRolePropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusApplicationRoleProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusApplicationRolePropertyTupleFields index] => this.Fields[(int)index];
44
45 public string ApplicationRole_
46 {
47 get => this.Fields[(int)ComPlusApplicationRolePropertyTupleFields.ApplicationRole_].AsString();
48 set => this.Set((int)ComPlusApplicationRolePropertyTupleFields.ApplicationRole_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusApplicationRolePropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusApplicationRolePropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusApplicationRolePropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusApplicationRolePropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusApplicationRoleTuple.cs b/src/wixext/Tuples/ComPlusApplicationRoleTuple.cs
new file mode 100644
index 00000000..5a0cf378
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusApplicationRoleTuple.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusApplicationRole = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusApplicationRole.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusApplicationRoleTupleFields.ApplicationRole), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusApplicationRoleTupleFields.Application_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusApplicationRoleTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusApplicationRoleTupleFields.Name), IntermediateFieldType.String),
18 },
19 typeof(ComPlusApplicationRoleTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusApplicationRoleTupleFields
28 {
29 ApplicationRole,
30 Application_,
31 Component_,
32 Name,
33 }
34
35 public class ComPlusApplicationRoleTuple : IntermediateTuple
36 {
37 public ComPlusApplicationRoleTuple() : base(ComPlusTupleDefinitions.ComPlusApplicationRole, null, null)
38 {
39 }
40
41 public ComPlusApplicationRoleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusApplicationRole, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusApplicationRoleTupleFields index] => this.Fields[(int)index];
46
47 public string ApplicationRole
48 {
49 get => this.Fields[(int)ComPlusApplicationRoleTupleFields.ApplicationRole].AsString();
50 set => this.Set((int)ComPlusApplicationRoleTupleFields.ApplicationRole, value);
51 }
52
53 public string Application_
54 {
55 get => this.Fields[(int)ComPlusApplicationRoleTupleFields.Application_].AsString();
56 set => this.Set((int)ComPlusApplicationRoleTupleFields.Application_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusApplicationRoleTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusApplicationRoleTupleFields.Component_, value);
63 }
64
65 public string Name
66 {
67 get => this.Fields[(int)ComPlusApplicationRoleTupleFields.Name].AsString();
68 set => this.Set((int)ComPlusApplicationRoleTupleFields.Name, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusApplicationTuple.cs b/src/wixext/Tuples/ComPlusApplicationTuple.cs
new file mode 100644
index 00000000..7fd5fbd4
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusApplicationTuple.cs
@@ -0,0 +1,79 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusApplication = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusApplication.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusApplicationTupleFields.Application), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusApplicationTupleFields.Partition_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusApplicationTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusApplicationTupleFields.CustomId), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ComPlusApplicationTupleFields.Name), IntermediateFieldType.String),
19 },
20 typeof(ComPlusApplicationTuple));
21 }
22}
23
24namespace WixToolset.ComPlus.Tuples
25{
26 using WixToolset.Data;
27
28 public enum ComPlusApplicationTupleFields
29 {
30 Application,
31 Partition_,
32 Component_,
33 CustomId,
34 Name,
35 }
36
37 public class ComPlusApplicationTuple : IntermediateTuple
38 {
39 public ComPlusApplicationTuple() : base(ComPlusTupleDefinitions.ComPlusApplication, null, null)
40 {
41 }
42
43 public ComPlusApplicationTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusApplication, sourceLineNumber, id)
44 {
45 }
46
47 public IntermediateField this[ComPlusApplicationTupleFields index] => this.Fields[(int)index];
48
49 public string Application
50 {
51 get => this.Fields[(int)ComPlusApplicationTupleFields.Application].AsString();
52 set => this.Set((int)ComPlusApplicationTupleFields.Application, value);
53 }
54
55 public string Partition_
56 {
57 get => this.Fields[(int)ComPlusApplicationTupleFields.Partition_].AsString();
58 set => this.Set((int)ComPlusApplicationTupleFields.Partition_, value);
59 }
60
61 public string Component_
62 {
63 get => this.Fields[(int)ComPlusApplicationTupleFields.Component_].AsString();
64 set => this.Set((int)ComPlusApplicationTupleFields.Component_, value);
65 }
66
67 public string CustomId
68 {
69 get => this.Fields[(int)ComPlusApplicationTupleFields.CustomId].AsString();
70 set => this.Set((int)ComPlusApplicationTupleFields.CustomId, value);
71 }
72
73 public string Name
74 {
75 get => this.Fields[(int)ComPlusApplicationTupleFields.Name].AsString();
76 set => this.Set((int)ComPlusApplicationTupleFields.Name, value);
77 }
78 }
79} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusAssemblyDependencyTuple.cs b/src/wixext/Tuples/ComPlusAssemblyDependencyTuple.cs
new file mode 100644
index 00000000..be0bc073
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusAssemblyDependencyTuple.cs
@@ -0,0 +1,55 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusAssemblyDependency = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusAssemblyDependency.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusAssemblyDependencyTupleFields.Assembly_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusAssemblyDependencyTupleFields.RequiredAssembly_), IntermediateFieldType.String),
16 },
17 typeof(ComPlusAssemblyDependencyTuple));
18 }
19}
20
21namespace WixToolset.ComPlus.Tuples
22{
23 using WixToolset.Data;
24
25 public enum ComPlusAssemblyDependencyTupleFields
26 {
27 Assembly_,
28 RequiredAssembly_,
29 }
30
31 public class ComPlusAssemblyDependencyTuple : IntermediateTuple
32 {
33 public ComPlusAssemblyDependencyTuple() : base(ComPlusTupleDefinitions.ComPlusAssemblyDependency, null, null)
34 {
35 }
36
37 public ComPlusAssemblyDependencyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusAssemblyDependency, sourceLineNumber, id)
38 {
39 }
40
41 public IntermediateField this[ComPlusAssemblyDependencyTupleFields index] => this.Fields[(int)index];
42
43 public string Assembly_
44 {
45 get => this.Fields[(int)ComPlusAssemblyDependencyTupleFields.Assembly_].AsString();
46 set => this.Set((int)ComPlusAssemblyDependencyTupleFields.Assembly_, value);
47 }
48
49 public string RequiredAssembly_
50 {
51 get => this.Fields[(int)ComPlusAssemblyDependencyTupleFields.RequiredAssembly_].AsString();
52 set => this.Set((int)ComPlusAssemblyDependencyTupleFields.RequiredAssembly_, value);
53 }
54 }
55} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusAssemblyTuple.cs b/src/wixext/Tuples/ComPlusAssemblyTuple.cs
new file mode 100644
index 00000000..0330b4e8
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusAssemblyTuple.cs
@@ -0,0 +1,103 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusAssembly = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusAssembly.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.Assembly), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.Application_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.AssemblyName), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.DllPath), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.TlbPath), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.PSDllPath), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(ComPlusAssemblyTupleFields.Attributes), IntermediateFieldType.Number),
22 },
23 typeof(ComPlusAssemblyTuple));
24 }
25}
26
27namespace WixToolset.ComPlus.Tuples
28{
29 using WixToolset.Data;
30
31 public enum ComPlusAssemblyTupleFields
32 {
33 Assembly,
34 Application_,
35 Component_,
36 AssemblyName,
37 DllPath,
38 TlbPath,
39 PSDllPath,
40 Attributes,
41 }
42
43 public class ComPlusAssemblyTuple : IntermediateTuple
44 {
45 public ComPlusAssemblyTuple() : base(ComPlusTupleDefinitions.ComPlusAssembly, null, null)
46 {
47 }
48
49 public ComPlusAssemblyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusAssembly, sourceLineNumber, id)
50 {
51 }
52
53 public IntermediateField this[ComPlusAssemblyTupleFields index] => this.Fields[(int)index];
54
55 public string Assembly
56 {
57 get => this.Fields[(int)ComPlusAssemblyTupleFields.Assembly].AsString();
58 set => this.Set((int)ComPlusAssemblyTupleFields.Assembly, value);
59 }
60
61 public string Application_
62 {
63 get => this.Fields[(int)ComPlusAssemblyTupleFields.Application_].AsString();
64 set => this.Set((int)ComPlusAssemblyTupleFields.Application_, value);
65 }
66
67 public string Component_
68 {
69 get => this.Fields[(int)ComPlusAssemblyTupleFields.Component_].AsString();
70 set => this.Set((int)ComPlusAssemblyTupleFields.Component_, value);
71 }
72
73 public string AssemblyName
74 {
75 get => this.Fields[(int)ComPlusAssemblyTupleFields.AssemblyName].AsString();
76 set => this.Set((int)ComPlusAssemblyTupleFields.AssemblyName, value);
77 }
78
79 public string DllPath
80 {
81 get => this.Fields[(int)ComPlusAssemblyTupleFields.DllPath].AsString();
82 set => this.Set((int)ComPlusAssemblyTupleFields.DllPath, value);
83 }
84
85 public string TlbPath
86 {
87 get => this.Fields[(int)ComPlusAssemblyTupleFields.TlbPath].AsString();
88 set => this.Set((int)ComPlusAssemblyTupleFields.TlbPath, value);
89 }
90
91 public string PSDllPath
92 {
93 get => this.Fields[(int)ComPlusAssemblyTupleFields.PSDllPath].AsString();
94 set => this.Set((int)ComPlusAssemblyTupleFields.PSDllPath, value);
95 }
96
97 public int Attributes
98 {
99 get => this.Fields[(int)ComPlusAssemblyTupleFields.Attributes].AsNumber();
100 set => this.Set((int)ComPlusAssemblyTupleFields.Attributes, value);
101 }
102 }
103} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusComponentPropertyTuple.cs b/src/wixext/Tuples/ComPlusComponentPropertyTuple.cs
new file mode 100644
index 00000000..81651343
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusComponentPropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusComponentProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusComponentProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusComponentPropertyTupleFields.ComPlusComponent_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusComponentPropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusComponentPropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusComponentPropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusComponentPropertyTupleFields
27 {
28 ComPlusComponent_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusComponentPropertyTuple : IntermediateTuple
34 {
35 public ComPlusComponentPropertyTuple() : base(ComPlusTupleDefinitions.ComPlusComponentProperty, null, null)
36 {
37 }
38
39 public ComPlusComponentPropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusComponentProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusComponentPropertyTupleFields index] => this.Fields[(int)index];
44
45 public string ComPlusComponent_
46 {
47 get => this.Fields[(int)ComPlusComponentPropertyTupleFields.ComPlusComponent_].AsString();
48 set => this.Set((int)ComPlusComponentPropertyTupleFields.ComPlusComponent_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusComponentPropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusComponentPropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusComponentPropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusComponentPropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusComponentTuple.cs b/src/wixext/Tuples/ComPlusComponentTuple.cs
new file mode 100644
index 00000000..923ff6e3
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusComponentTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusComponent = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusComponent.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusComponentTupleFields.ComPlusComponent), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusComponentTupleFields.Assembly_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusComponentTupleFields.CLSID), IntermediateFieldType.String),
17 },
18 typeof(ComPlusComponentTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusComponentTupleFields
27 {
28 ComPlusComponent,
29 Assembly_,
30 CLSID,
31 }
32
33 public class ComPlusComponentTuple : IntermediateTuple
34 {
35 public ComPlusComponentTuple() : base(ComPlusTupleDefinitions.ComPlusComponent, null, null)
36 {
37 }
38
39 public ComPlusComponentTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusComponent, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusComponentTupleFields index] => this.Fields[(int)index];
44
45 public string ComPlusComponent
46 {
47 get => this.Fields[(int)ComPlusComponentTupleFields.ComPlusComponent].AsString();
48 set => this.Set((int)ComPlusComponentTupleFields.ComPlusComponent, value);
49 }
50
51 public string Assembly_
52 {
53 get => this.Fields[(int)ComPlusComponentTupleFields.Assembly_].AsString();
54 set => this.Set((int)ComPlusComponentTupleFields.Assembly_, value);
55 }
56
57 public string CLSID
58 {
59 get => this.Fields[(int)ComPlusComponentTupleFields.CLSID].AsString();
60 set => this.Set((int)ComPlusComponentTupleFields.CLSID, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusGroupInApplicationRoleTuple.cs b/src/wixext/Tuples/ComPlusGroupInApplicationRoleTuple.cs
new file mode 100644
index 00000000..40b47eb3
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusGroupInApplicationRoleTuple.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusGroupInApplicationRole = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusGroupInApplicationRole.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusGroupInApplicationRoleTupleFields.GroupInApplicationRole), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusGroupInApplicationRoleTupleFields.ApplicationRole_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusGroupInApplicationRoleTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusGroupInApplicationRoleTupleFields.Group_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusGroupInApplicationRoleTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusGroupInApplicationRoleTupleFields
28 {
29 GroupInApplicationRole,
30 ApplicationRole_,
31 Component_,
32 Group_,
33 }
34
35 public class ComPlusGroupInApplicationRoleTuple : IntermediateTuple
36 {
37 public ComPlusGroupInApplicationRoleTuple() : base(ComPlusTupleDefinitions.ComPlusGroupInApplicationRole, null, null)
38 {
39 }
40
41 public ComPlusGroupInApplicationRoleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusGroupInApplicationRole, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusGroupInApplicationRoleTupleFields index] => this.Fields[(int)index];
46
47 public string GroupInApplicationRole
48 {
49 get => this.Fields[(int)ComPlusGroupInApplicationRoleTupleFields.GroupInApplicationRole].AsString();
50 set => this.Set((int)ComPlusGroupInApplicationRoleTupleFields.GroupInApplicationRole, value);
51 }
52
53 public string ApplicationRole_
54 {
55 get => this.Fields[(int)ComPlusGroupInApplicationRoleTupleFields.ApplicationRole_].AsString();
56 set => this.Set((int)ComPlusGroupInApplicationRoleTupleFields.ApplicationRole_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusGroupInApplicationRoleTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusGroupInApplicationRoleTupleFields.Component_, value);
63 }
64
65 public string Group_
66 {
67 get => this.Fields[(int)ComPlusGroupInApplicationRoleTupleFields.Group_].AsString();
68 set => this.Set((int)ComPlusGroupInApplicationRoleTupleFields.Group_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusGroupInPartitionRoleTuple.cs b/src/wixext/Tuples/ComPlusGroupInPartitionRoleTuple.cs
new file mode 100644
index 00000000..092937f0
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusGroupInPartitionRoleTuple.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusGroupInPartitionRole = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusGroupInPartitionRole.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusGroupInPartitionRoleTupleFields.GroupInPartitionRole), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusGroupInPartitionRoleTupleFields.PartitionRole_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusGroupInPartitionRoleTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusGroupInPartitionRoleTupleFields.Group_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusGroupInPartitionRoleTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusGroupInPartitionRoleTupleFields
28 {
29 GroupInPartitionRole,
30 PartitionRole_,
31 Component_,
32 Group_,
33 }
34
35 public class ComPlusGroupInPartitionRoleTuple : IntermediateTuple
36 {
37 public ComPlusGroupInPartitionRoleTuple() : base(ComPlusTupleDefinitions.ComPlusGroupInPartitionRole, null, null)
38 {
39 }
40
41 public ComPlusGroupInPartitionRoleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusGroupInPartitionRole, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusGroupInPartitionRoleTupleFields index] => this.Fields[(int)index];
46
47 public string GroupInPartitionRole
48 {
49 get => this.Fields[(int)ComPlusGroupInPartitionRoleTupleFields.GroupInPartitionRole].AsString();
50 set => this.Set((int)ComPlusGroupInPartitionRoleTupleFields.GroupInPartitionRole, value);
51 }
52
53 public string PartitionRole_
54 {
55 get => this.Fields[(int)ComPlusGroupInPartitionRoleTupleFields.PartitionRole_].AsString();
56 set => this.Set((int)ComPlusGroupInPartitionRoleTupleFields.PartitionRole_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusGroupInPartitionRoleTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusGroupInPartitionRoleTupleFields.Component_, value);
63 }
64
65 public string Group_
66 {
67 get => this.Fields[(int)ComPlusGroupInPartitionRoleTupleFields.Group_].AsString();
68 set => this.Set((int)ComPlusGroupInPartitionRoleTupleFields.Group_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusInterfacePropertyTuple.cs b/src/wixext/Tuples/ComPlusInterfacePropertyTuple.cs
new file mode 100644
index 00000000..94f12914
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusInterfacePropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusInterfaceProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusInterfaceProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusInterfacePropertyTupleFields.Interface_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusInterfacePropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusInterfacePropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusInterfacePropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusInterfacePropertyTupleFields
27 {
28 Interface_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusInterfacePropertyTuple : IntermediateTuple
34 {
35 public ComPlusInterfacePropertyTuple() : base(ComPlusTupleDefinitions.ComPlusInterfaceProperty, null, null)
36 {
37 }
38
39 public ComPlusInterfacePropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusInterfaceProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusInterfacePropertyTupleFields index] => this.Fields[(int)index];
44
45 public string Interface_
46 {
47 get => this.Fields[(int)ComPlusInterfacePropertyTupleFields.Interface_].AsString();
48 set => this.Set((int)ComPlusInterfacePropertyTupleFields.Interface_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusInterfacePropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusInterfacePropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusInterfacePropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusInterfacePropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusInterfaceTuple.cs b/src/wixext/Tuples/ComPlusInterfaceTuple.cs
new file mode 100644
index 00000000..3c4042ef
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusInterfaceTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusInterface = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusInterface.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusInterfaceTupleFields.Interface), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusInterfaceTupleFields.ComPlusComponent_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusInterfaceTupleFields.IID), IntermediateFieldType.String),
17 },
18 typeof(ComPlusInterfaceTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusInterfaceTupleFields
27 {
28 Interface,
29 ComPlusComponent_,
30 IID,
31 }
32
33 public class ComPlusInterfaceTuple : IntermediateTuple
34 {
35 public ComPlusInterfaceTuple() : base(ComPlusTupleDefinitions.ComPlusInterface, null, null)
36 {
37 }
38
39 public ComPlusInterfaceTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusInterface, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusInterfaceTupleFields index] => this.Fields[(int)index];
44
45 public string Interface
46 {
47 get => this.Fields[(int)ComPlusInterfaceTupleFields.Interface].AsString();
48 set => this.Set((int)ComPlusInterfaceTupleFields.Interface, value);
49 }
50
51 public string ComPlusComponent_
52 {
53 get => this.Fields[(int)ComPlusInterfaceTupleFields.ComPlusComponent_].AsString();
54 set => this.Set((int)ComPlusInterfaceTupleFields.ComPlusComponent_, value);
55 }
56
57 public string IID
58 {
59 get => this.Fields[(int)ComPlusInterfaceTupleFields.IID].AsString();
60 set => this.Set((int)ComPlusInterfaceTupleFields.IID, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusMethodPropertyTuple.cs b/src/wixext/Tuples/ComPlusMethodPropertyTuple.cs
new file mode 100644
index 00000000..8ebc3f6b
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusMethodPropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusMethodProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusMethodProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusMethodPropertyTupleFields.Method_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusMethodPropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusMethodPropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusMethodPropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusMethodPropertyTupleFields
27 {
28 Method_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusMethodPropertyTuple : IntermediateTuple
34 {
35 public ComPlusMethodPropertyTuple() : base(ComPlusTupleDefinitions.ComPlusMethodProperty, null, null)
36 {
37 }
38
39 public ComPlusMethodPropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusMethodProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusMethodPropertyTupleFields index] => this.Fields[(int)index];
44
45 public string Method_
46 {
47 get => this.Fields[(int)ComPlusMethodPropertyTupleFields.Method_].AsString();
48 set => this.Set((int)ComPlusMethodPropertyTupleFields.Method_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusMethodPropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusMethodPropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusMethodPropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusMethodPropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusMethodTuple.cs b/src/wixext/Tuples/ComPlusMethodTuple.cs
new file mode 100644
index 00000000..bcca034a
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusMethodTuple.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusMethod = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusMethod.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusMethodTupleFields.Method), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusMethodTupleFields.Interface_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusMethodTupleFields.Index), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(ComPlusMethodTupleFields.Name), IntermediateFieldType.String),
18 },
19 typeof(ComPlusMethodTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusMethodTupleFields
28 {
29 Method,
30 Interface_,
31 Index,
32 Name,
33 }
34
35 public class ComPlusMethodTuple : IntermediateTuple
36 {
37 public ComPlusMethodTuple() : base(ComPlusTupleDefinitions.ComPlusMethod, null, null)
38 {
39 }
40
41 public ComPlusMethodTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusMethod, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusMethodTupleFields index] => this.Fields[(int)index];
46
47 public string Method
48 {
49 get => this.Fields[(int)ComPlusMethodTupleFields.Method].AsString();
50 set => this.Set((int)ComPlusMethodTupleFields.Method, value);
51 }
52
53 public string Interface_
54 {
55 get => this.Fields[(int)ComPlusMethodTupleFields.Interface_].AsString();
56 set => this.Set((int)ComPlusMethodTupleFields.Interface_, value);
57 }
58
59 public int Index
60 {
61 get => this.Fields[(int)ComPlusMethodTupleFields.Index].AsNumber();
62 set => this.Set((int)ComPlusMethodTupleFields.Index, value);
63 }
64
65 public string Name
66 {
67 get => this.Fields[(int)ComPlusMethodTupleFields.Name].AsString();
68 set => this.Set((int)ComPlusMethodTupleFields.Name, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusPartitionPropertyTuple.cs b/src/wixext/Tuples/ComPlusPartitionPropertyTuple.cs
new file mode 100644
index 00000000..3427b10a
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusPartitionPropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusPartitionProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusPartitionProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusPartitionPropertyTupleFields.Partition_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusPartitionPropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusPartitionPropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusPartitionPropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusPartitionPropertyTupleFields
27 {
28 Partition_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusPartitionPropertyTuple : IntermediateTuple
34 {
35 public ComPlusPartitionPropertyTuple() : base(ComPlusTupleDefinitions.ComPlusPartitionProperty, null, null)
36 {
37 }
38
39 public ComPlusPartitionPropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusPartitionProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusPartitionPropertyTupleFields index] => this.Fields[(int)index];
44
45 public string Partition_
46 {
47 get => this.Fields[(int)ComPlusPartitionPropertyTupleFields.Partition_].AsString();
48 set => this.Set((int)ComPlusPartitionPropertyTupleFields.Partition_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusPartitionPropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusPartitionPropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusPartitionPropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusPartitionPropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusPartitionRoleTuple.cs b/src/wixext/Tuples/ComPlusPartitionRoleTuple.cs
new file mode 100644
index 00000000..a2259cc6
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusPartitionRoleTuple.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusPartitionRole = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusPartitionRole.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusPartitionRoleTupleFields.PartitionRole), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusPartitionRoleTupleFields.Partition_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusPartitionRoleTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusPartitionRoleTupleFields.Name), IntermediateFieldType.String),
18 },
19 typeof(ComPlusPartitionRoleTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusPartitionRoleTupleFields
28 {
29 PartitionRole,
30 Partition_,
31 Component_,
32 Name,
33 }
34
35 public class ComPlusPartitionRoleTuple : IntermediateTuple
36 {
37 public ComPlusPartitionRoleTuple() : base(ComPlusTupleDefinitions.ComPlusPartitionRole, null, null)
38 {
39 }
40
41 public ComPlusPartitionRoleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusPartitionRole, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusPartitionRoleTupleFields index] => this.Fields[(int)index];
46
47 public string PartitionRole
48 {
49 get => this.Fields[(int)ComPlusPartitionRoleTupleFields.PartitionRole].AsString();
50 set => this.Set((int)ComPlusPartitionRoleTupleFields.PartitionRole, value);
51 }
52
53 public string Partition_
54 {
55 get => this.Fields[(int)ComPlusPartitionRoleTupleFields.Partition_].AsString();
56 set => this.Set((int)ComPlusPartitionRoleTupleFields.Partition_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusPartitionRoleTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusPartitionRoleTupleFields.Component_, value);
63 }
64
65 public string Name
66 {
67 get => this.Fields[(int)ComPlusPartitionRoleTupleFields.Name].AsString();
68 set => this.Set((int)ComPlusPartitionRoleTupleFields.Name, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusPartitionTuple.cs b/src/wixext/Tuples/ComPlusPartitionTuple.cs
new file mode 100644
index 00000000..68de9955
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusPartitionTuple.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusPartition = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusPartition.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusPartitionTupleFields.Partition), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusPartitionTupleFields.Component_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusPartitionTupleFields.CustomId), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusPartitionTupleFields.Name), IntermediateFieldType.String),
18 },
19 typeof(ComPlusPartitionTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusPartitionTupleFields
28 {
29 Partition,
30 Component_,
31 CustomId,
32 Name,
33 }
34
35 public class ComPlusPartitionTuple : IntermediateTuple
36 {
37 public ComPlusPartitionTuple() : base(ComPlusTupleDefinitions.ComPlusPartition, null, null)
38 {
39 }
40
41 public ComPlusPartitionTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusPartition, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusPartitionTupleFields index] => this.Fields[(int)index];
46
47 public string Partition
48 {
49 get => this.Fields[(int)ComPlusPartitionTupleFields.Partition].AsString();
50 set => this.Set((int)ComPlusPartitionTupleFields.Partition, value);
51 }
52
53 public string Component_
54 {
55 get => this.Fields[(int)ComPlusPartitionTupleFields.Component_].AsString();
56 set => this.Set((int)ComPlusPartitionTupleFields.Component_, value);
57 }
58
59 public string CustomId
60 {
61 get => this.Fields[(int)ComPlusPartitionTupleFields.CustomId].AsString();
62 set => this.Set((int)ComPlusPartitionTupleFields.CustomId, value);
63 }
64
65 public string Name
66 {
67 get => this.Fields[(int)ComPlusPartitionTupleFields.Name].AsString();
68 set => this.Set((int)ComPlusPartitionTupleFields.Name, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusPartitionUserTuple.cs b/src/wixext/Tuples/ComPlusPartitionUserTuple.cs
new file mode 100644
index 00000000..33a58d38
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusPartitionUserTuple.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusPartitionUser = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusPartitionUser.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusPartitionUserTupleFields.PartitionUser), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusPartitionUserTupleFields.Partition_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusPartitionUserTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusPartitionUserTupleFields.User_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusPartitionUserTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusPartitionUserTupleFields
28 {
29 PartitionUser,
30 Partition_,
31 Component_,
32 User_,
33 }
34
35 public class ComPlusPartitionUserTuple : IntermediateTuple
36 {
37 public ComPlusPartitionUserTuple() : base(ComPlusTupleDefinitions.ComPlusPartitionUser, null, null)
38 {
39 }
40
41 public ComPlusPartitionUserTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusPartitionUser, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusPartitionUserTupleFields index] => this.Fields[(int)index];
46
47 public string PartitionUser
48 {
49 get => this.Fields[(int)ComPlusPartitionUserTupleFields.PartitionUser].AsString();
50 set => this.Set((int)ComPlusPartitionUserTupleFields.PartitionUser, value);
51 }
52
53 public string Partition_
54 {
55 get => this.Fields[(int)ComPlusPartitionUserTupleFields.Partition_].AsString();
56 set => this.Set((int)ComPlusPartitionUserTupleFields.Partition_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusPartitionUserTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusPartitionUserTupleFields.Component_, value);
63 }
64
65 public string User_
66 {
67 get => this.Fields[(int)ComPlusPartitionUserTupleFields.User_].AsString();
68 set => this.Set((int)ComPlusPartitionUserTupleFields.User_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusRoleForComponentTuple.cs b/src/wixext/Tuples/ComPlusRoleForComponentTuple.cs
new file mode 100644
index 00000000..75d8cfaf
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusRoleForComponentTuple.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusRoleForComponent = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusRoleForComponent.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusRoleForComponentTupleFields.RoleForComponent), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusRoleForComponentTupleFields.ComPlusComponent_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusRoleForComponentTupleFields.ApplicationRole_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusRoleForComponentTupleFields.Component_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusRoleForComponentTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusRoleForComponentTupleFields
28 {
29 RoleForComponent,
30 ComPlusComponent_,
31 ApplicationRole_,
32 Component_,
33 }
34
35 public class ComPlusRoleForComponentTuple : IntermediateTuple
36 {
37 public ComPlusRoleForComponentTuple() : base(ComPlusTupleDefinitions.ComPlusRoleForComponent, null, null)
38 {
39 }
40
41 public ComPlusRoleForComponentTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusRoleForComponent, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusRoleForComponentTupleFields index] => this.Fields[(int)index];
46
47 public string RoleForComponent
48 {
49 get => this.Fields[(int)ComPlusRoleForComponentTupleFields.RoleForComponent].AsString();
50 set => this.Set((int)ComPlusRoleForComponentTupleFields.RoleForComponent, value);
51 }
52
53 public string ComPlusComponent_
54 {
55 get => this.Fields[(int)ComPlusRoleForComponentTupleFields.ComPlusComponent_].AsString();
56 set => this.Set((int)ComPlusRoleForComponentTupleFields.ComPlusComponent_, value);
57 }
58
59 public string ApplicationRole_
60 {
61 get => this.Fields[(int)ComPlusRoleForComponentTupleFields.ApplicationRole_].AsString();
62 set => this.Set((int)ComPlusRoleForComponentTupleFields.ApplicationRole_, value);
63 }
64
65 public string Component_
66 {
67 get => this.Fields[(int)ComPlusRoleForComponentTupleFields.Component_].AsString();
68 set => this.Set((int)ComPlusRoleForComponentTupleFields.Component_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusRoleForInterfaceTuple.cs b/src/wixext/Tuples/ComPlusRoleForInterfaceTuple.cs
new file mode 100644
index 00000000..139417d3
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusRoleForInterfaceTuple.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusRoleForInterface = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusRoleForInterface.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusRoleForInterfaceTupleFields.RoleForInterface), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusRoleForInterfaceTupleFields.Interface_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusRoleForInterfaceTupleFields.ApplicationRole_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusRoleForInterfaceTupleFields.Component_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusRoleForInterfaceTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusRoleForInterfaceTupleFields
28 {
29 RoleForInterface,
30 Interface_,
31 ApplicationRole_,
32 Component_,
33 }
34
35 public class ComPlusRoleForInterfaceTuple : IntermediateTuple
36 {
37 public ComPlusRoleForInterfaceTuple() : base(ComPlusTupleDefinitions.ComPlusRoleForInterface, null, null)
38 {
39 }
40
41 public ComPlusRoleForInterfaceTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusRoleForInterface, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusRoleForInterfaceTupleFields index] => this.Fields[(int)index];
46
47 public string RoleForInterface
48 {
49 get => this.Fields[(int)ComPlusRoleForInterfaceTupleFields.RoleForInterface].AsString();
50 set => this.Set((int)ComPlusRoleForInterfaceTupleFields.RoleForInterface, value);
51 }
52
53 public string Interface_
54 {
55 get => this.Fields[(int)ComPlusRoleForInterfaceTupleFields.Interface_].AsString();
56 set => this.Set((int)ComPlusRoleForInterfaceTupleFields.Interface_, value);
57 }
58
59 public string ApplicationRole_
60 {
61 get => this.Fields[(int)ComPlusRoleForInterfaceTupleFields.ApplicationRole_].AsString();
62 set => this.Set((int)ComPlusRoleForInterfaceTupleFields.ApplicationRole_, value);
63 }
64
65 public string Component_
66 {
67 get => this.Fields[(int)ComPlusRoleForInterfaceTupleFields.Component_].AsString();
68 set => this.Set((int)ComPlusRoleForInterfaceTupleFields.Component_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusRoleForMethodTuple.cs b/src/wixext/Tuples/ComPlusRoleForMethodTuple.cs
new file mode 100644
index 00000000..5b6e994e
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusRoleForMethodTuple.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusRoleForMethod = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusRoleForMethod.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusRoleForMethodTupleFields.RoleForMethod), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusRoleForMethodTupleFields.Method_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusRoleForMethodTupleFields.ApplicationRole_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusRoleForMethodTupleFields.Component_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusRoleForMethodTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusRoleForMethodTupleFields
28 {
29 RoleForMethod,
30 Method_,
31 ApplicationRole_,
32 Component_,
33 }
34
35 public class ComPlusRoleForMethodTuple : IntermediateTuple
36 {
37 public ComPlusRoleForMethodTuple() : base(ComPlusTupleDefinitions.ComPlusRoleForMethod, null, null)
38 {
39 }
40
41 public ComPlusRoleForMethodTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusRoleForMethod, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusRoleForMethodTupleFields index] => this.Fields[(int)index];
46
47 public string RoleForMethod
48 {
49 get => this.Fields[(int)ComPlusRoleForMethodTupleFields.RoleForMethod].AsString();
50 set => this.Set((int)ComPlusRoleForMethodTupleFields.RoleForMethod, value);
51 }
52
53 public string Method_
54 {
55 get => this.Fields[(int)ComPlusRoleForMethodTupleFields.Method_].AsString();
56 set => this.Set((int)ComPlusRoleForMethodTupleFields.Method_, value);
57 }
58
59 public string ApplicationRole_
60 {
61 get => this.Fields[(int)ComPlusRoleForMethodTupleFields.ApplicationRole_].AsString();
62 set => this.Set((int)ComPlusRoleForMethodTupleFields.ApplicationRole_, value);
63 }
64
65 public string Component_
66 {
67 get => this.Fields[(int)ComPlusRoleForMethodTupleFields.Component_].AsString();
68 set => this.Set((int)ComPlusRoleForMethodTupleFields.Component_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusSubscriptionPropertyTuple.cs b/src/wixext/Tuples/ComPlusSubscriptionPropertyTuple.cs
new file mode 100644
index 00000000..ad0841f4
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusSubscriptionPropertyTuple.cs
@@ -0,0 +1,63 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusSubscriptionProperty = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusSubscriptionProperty.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionPropertyTupleFields.Subscription_), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionPropertyTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionPropertyTupleFields.Value), IntermediateFieldType.String),
17 },
18 typeof(ComPlusSubscriptionPropertyTuple));
19 }
20}
21
22namespace WixToolset.ComPlus.Tuples
23{
24 using WixToolset.Data;
25
26 public enum ComPlusSubscriptionPropertyTupleFields
27 {
28 Subscription_,
29 Name,
30 Value,
31 }
32
33 public class ComPlusSubscriptionPropertyTuple : IntermediateTuple
34 {
35 public ComPlusSubscriptionPropertyTuple() : base(ComPlusTupleDefinitions.ComPlusSubscriptionProperty, null, null)
36 {
37 }
38
39 public ComPlusSubscriptionPropertyTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusSubscriptionProperty, sourceLineNumber, id)
40 {
41 }
42
43 public IntermediateField this[ComPlusSubscriptionPropertyTupleFields index] => this.Fields[(int)index];
44
45 public string Subscription_
46 {
47 get => this.Fields[(int)ComPlusSubscriptionPropertyTupleFields.Subscription_].AsString();
48 set => this.Set((int)ComPlusSubscriptionPropertyTupleFields.Subscription_, value);
49 }
50
51 public string Name
52 {
53 get => this.Fields[(int)ComPlusSubscriptionPropertyTupleFields.Name].AsString();
54 set => this.Set((int)ComPlusSubscriptionPropertyTupleFields.Name, value);
55 }
56
57 public string Value
58 {
59 get => this.Fields[(int)ComPlusSubscriptionPropertyTupleFields.Value].AsString();
60 set => this.Set((int)ComPlusSubscriptionPropertyTupleFields.Value, value);
61 }
62 }
63} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusSubscriptionTuple.cs b/src/wixext/Tuples/ComPlusSubscriptionTuple.cs
new file mode 100644
index 00000000..fedab172
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusSubscriptionTuple.cs
@@ -0,0 +1,95 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusSubscription = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusSubscription.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.Subscription), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.ComPlusComponent_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.CustomId), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.Name), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.EventCLSID), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(ComPlusSubscriptionTupleFields.PublisherID), IntermediateFieldType.String),
21 },
22 typeof(ComPlusSubscriptionTuple));
23 }
24}
25
26namespace WixToolset.ComPlus.Tuples
27{
28 using WixToolset.Data;
29
30 public enum ComPlusSubscriptionTupleFields
31 {
32 Subscription,
33 ComPlusComponent_,
34 Component_,
35 CustomId,
36 Name,
37 EventCLSID,
38 PublisherID,
39 }
40
41 public class ComPlusSubscriptionTuple : IntermediateTuple
42 {
43 public ComPlusSubscriptionTuple() : base(ComPlusTupleDefinitions.ComPlusSubscription, null, null)
44 {
45 }
46
47 public ComPlusSubscriptionTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusSubscription, sourceLineNumber, id)
48 {
49 }
50
51 public IntermediateField this[ComPlusSubscriptionTupleFields index] => this.Fields[(int)index];
52
53 public string Subscription
54 {
55 get => this.Fields[(int)ComPlusSubscriptionTupleFields.Subscription].AsString();
56 set => this.Set((int)ComPlusSubscriptionTupleFields.Subscription, value);
57 }
58
59 public string ComPlusComponent_
60 {
61 get => this.Fields[(int)ComPlusSubscriptionTupleFields.ComPlusComponent_].AsString();
62 set => this.Set((int)ComPlusSubscriptionTupleFields.ComPlusComponent_, value);
63 }
64
65 public string Component_
66 {
67 get => this.Fields[(int)ComPlusSubscriptionTupleFields.Component_].AsString();
68 set => this.Set((int)ComPlusSubscriptionTupleFields.Component_, value);
69 }
70
71 public string CustomId
72 {
73 get => this.Fields[(int)ComPlusSubscriptionTupleFields.CustomId].AsString();
74 set => this.Set((int)ComPlusSubscriptionTupleFields.CustomId, value);
75 }
76
77 public string Name
78 {
79 get => this.Fields[(int)ComPlusSubscriptionTupleFields.Name].AsString();
80 set => this.Set((int)ComPlusSubscriptionTupleFields.Name, value);
81 }
82
83 public string EventCLSID
84 {
85 get => this.Fields[(int)ComPlusSubscriptionTupleFields.EventCLSID].AsString();
86 set => this.Set((int)ComPlusSubscriptionTupleFields.EventCLSID, value);
87 }
88
89 public string PublisherID
90 {
91 get => this.Fields[(int)ComPlusSubscriptionTupleFields.PublisherID].AsString();
92 set => this.Set((int)ComPlusSubscriptionTupleFields.PublisherID, value);
93 }
94 }
95} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusTupleDefinitions.cs b/src/wixext/Tuples/ComPlusTupleDefinitions.cs
new file mode 100644
index 00000000..1019c046
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusTupleDefinitions.cs
@@ -0,0 +1,135 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using System;
6 using WixToolset.Data;
7
8 public enum ComPlusTupleDefinitionType
9 {
10 ComPlusApplication,
11 ComPlusApplicationProperty,
12 ComPlusApplicationRole,
13 ComPlusApplicationRoleProperty,
14 ComPlusAssembly,
15 ComPlusAssemblyDependency,
16 ComPlusComponent,
17 ComPlusComponentProperty,
18 ComPlusGroupInApplicationRole,
19 ComPlusGroupInPartitionRole,
20 ComPlusInterface,
21 ComPlusInterfaceProperty,
22 ComPlusMethod,
23 ComPlusMethodProperty,
24 ComPlusPartition,
25 ComPlusPartitionProperty,
26 ComPlusPartitionRole,
27 ComPlusPartitionUser,
28 ComPlusRoleForComponent,
29 ComPlusRoleForInterface,
30 ComPlusRoleForMethod,
31 ComPlusSubscription,
32 ComPlusSubscriptionProperty,
33 ComPlusUserInApplicationRole,
34 ComPlusUserInPartitionRole,
35 }
36
37 public static partial class ComPlusTupleDefinitions
38 {
39 public static readonly Version Version = new Version("4.0.0");
40
41 public static IntermediateTupleDefinition ByName(string name)
42 {
43 if (!Enum.TryParse(name, out ComPlusTupleDefinitionType type))
44 {
45 return null;
46 }
47
48 return ByType(type);
49 }
50
51 public static IntermediateTupleDefinition ByType(ComPlusTupleDefinitionType type)
52 {
53 switch (type)
54 {
55 case ComPlusTupleDefinitionType.ComPlusApplication:
56 return ComPlusTupleDefinitions.ComPlusApplication;
57
58 case ComPlusTupleDefinitionType.ComPlusApplicationProperty:
59 return ComPlusTupleDefinitions.ComPlusApplicationProperty;
60
61 case ComPlusTupleDefinitionType.ComPlusApplicationRole:
62 return ComPlusTupleDefinitions.ComPlusApplicationRole;
63
64 case ComPlusTupleDefinitionType.ComPlusApplicationRoleProperty:
65 return ComPlusTupleDefinitions.ComPlusApplicationRoleProperty;
66
67 case ComPlusTupleDefinitionType.ComPlusAssembly:
68 return ComPlusTupleDefinitions.ComPlusAssembly;
69
70 case ComPlusTupleDefinitionType.ComPlusAssemblyDependency:
71 return ComPlusTupleDefinitions.ComPlusAssemblyDependency;
72
73 case ComPlusTupleDefinitionType.ComPlusComponent:
74 return ComPlusTupleDefinitions.ComPlusComponent;
75
76 case ComPlusTupleDefinitionType.ComPlusComponentProperty:
77 return ComPlusTupleDefinitions.ComPlusComponentProperty;
78
79 case ComPlusTupleDefinitionType.ComPlusGroupInApplicationRole:
80 return ComPlusTupleDefinitions.ComPlusGroupInApplicationRole;
81
82 case ComPlusTupleDefinitionType.ComPlusGroupInPartitionRole:
83 return ComPlusTupleDefinitions.ComPlusGroupInPartitionRole;
84
85 case ComPlusTupleDefinitionType.ComPlusInterface:
86 return ComPlusTupleDefinitions.ComPlusInterface;
87
88 case ComPlusTupleDefinitionType.ComPlusInterfaceProperty:
89 return ComPlusTupleDefinitions.ComPlusInterfaceProperty;
90
91 case ComPlusTupleDefinitionType.ComPlusMethod:
92 return ComPlusTupleDefinitions.ComPlusMethod;
93
94 case ComPlusTupleDefinitionType.ComPlusMethodProperty:
95 return ComPlusTupleDefinitions.ComPlusMethodProperty;
96
97 case ComPlusTupleDefinitionType.ComPlusPartition:
98 return ComPlusTupleDefinitions.ComPlusPartition;
99
100 case ComPlusTupleDefinitionType.ComPlusPartitionProperty:
101 return ComPlusTupleDefinitions.ComPlusPartitionProperty;
102
103 case ComPlusTupleDefinitionType.ComPlusPartitionRole:
104 return ComPlusTupleDefinitions.ComPlusPartitionRole;
105
106 case ComPlusTupleDefinitionType.ComPlusPartitionUser:
107 return ComPlusTupleDefinitions.ComPlusPartitionUser;
108
109 case ComPlusTupleDefinitionType.ComPlusRoleForComponent:
110 return ComPlusTupleDefinitions.ComPlusRoleForComponent;
111
112 case ComPlusTupleDefinitionType.ComPlusRoleForInterface:
113 return ComPlusTupleDefinitions.ComPlusRoleForInterface;
114
115 case ComPlusTupleDefinitionType.ComPlusRoleForMethod:
116 return ComPlusTupleDefinitions.ComPlusRoleForMethod;
117
118 case ComPlusTupleDefinitionType.ComPlusSubscription:
119 return ComPlusTupleDefinitions.ComPlusSubscription;
120
121 case ComPlusTupleDefinitionType.ComPlusSubscriptionProperty:
122 return ComPlusTupleDefinitions.ComPlusSubscriptionProperty;
123
124 case ComPlusTupleDefinitionType.ComPlusUserInApplicationRole:
125 return ComPlusTupleDefinitions.ComPlusUserInApplicationRole;
126
127 case ComPlusTupleDefinitionType.ComPlusUserInPartitionRole:
128 return ComPlusTupleDefinitions.ComPlusUserInPartitionRole;
129
130 default:
131 throw new ArgumentOutOfRangeException(nameof(type));
132 }
133 }
134 }
135}
diff --git a/src/wixext/Tuples/ComPlusUserInApplicationRoleTuple.cs b/src/wixext/Tuples/ComPlusUserInApplicationRoleTuple.cs
new file mode 100644
index 00000000..3916c0ee
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusUserInApplicationRoleTuple.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusUserInApplicationRole = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusUserInApplicationRole.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusUserInApplicationRoleTupleFields.UserInApplicationRole), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusUserInApplicationRoleTupleFields.ApplicationRole_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusUserInApplicationRoleTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusUserInApplicationRoleTupleFields.User_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusUserInApplicationRoleTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusUserInApplicationRoleTupleFields
28 {
29 UserInApplicationRole,
30 ApplicationRole_,
31 Component_,
32 User_,
33 }
34
35 public class ComPlusUserInApplicationRoleTuple : IntermediateTuple
36 {
37 public ComPlusUserInApplicationRoleTuple() : base(ComPlusTupleDefinitions.ComPlusUserInApplicationRole, null, null)
38 {
39 }
40
41 public ComPlusUserInApplicationRoleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusUserInApplicationRole, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusUserInApplicationRoleTupleFields index] => this.Fields[(int)index];
46
47 public string UserInApplicationRole
48 {
49 get => this.Fields[(int)ComPlusUserInApplicationRoleTupleFields.UserInApplicationRole].AsString();
50 set => this.Set((int)ComPlusUserInApplicationRoleTupleFields.UserInApplicationRole, value);
51 }
52
53 public string ApplicationRole_
54 {
55 get => this.Fields[(int)ComPlusUserInApplicationRoleTupleFields.ApplicationRole_].AsString();
56 set => this.Set((int)ComPlusUserInApplicationRoleTupleFields.ApplicationRole_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusUserInApplicationRoleTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusUserInApplicationRoleTupleFields.Component_, value);
63 }
64
65 public string User_
66 {
67 get => this.Fields[(int)ComPlusUserInApplicationRoleTupleFields.User_].AsString();
68 set => this.Set((int)ComPlusUserInApplicationRoleTupleFields.User_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/Tuples/ComPlusUserInPartitionRoleTuple.cs b/src/wixext/Tuples/ComPlusUserInPartitionRoleTuple.cs
new file mode 100644
index 00000000..06d742b8
--- /dev/null
+++ b/src/wixext/Tuples/ComPlusUserInPartitionRoleTuple.cs
@@ -0,0 +1,71 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixToolset.ComPlus
4{
5 using WixToolset.Data;
6 using WixToolset.ComPlus.Tuples;
7
8 public static partial class ComPlusTupleDefinitions
9 {
10 public static readonly IntermediateTupleDefinition ComPlusUserInPartitionRole = new IntermediateTupleDefinition(
11 ComPlusTupleDefinitionType.ComPlusUserInPartitionRole.ToString(),
12 new[]
13 {
14 new IntermediateFieldDefinition(nameof(ComPlusUserInPartitionRoleTupleFields.UserInPartitionRole), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ComPlusUserInPartitionRoleTupleFields.PartitionRole_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ComPlusUserInPartitionRoleTupleFields.Component_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(ComPlusUserInPartitionRoleTupleFields.User_), IntermediateFieldType.String),
18 },
19 typeof(ComPlusUserInPartitionRoleTuple));
20 }
21}
22
23namespace WixToolset.ComPlus.Tuples
24{
25 using WixToolset.Data;
26
27 public enum ComPlusUserInPartitionRoleTupleFields
28 {
29 UserInPartitionRole,
30 PartitionRole_,
31 Component_,
32 User_,
33 }
34
35 public class ComPlusUserInPartitionRoleTuple : IntermediateTuple
36 {
37 public ComPlusUserInPartitionRoleTuple() : base(ComPlusTupleDefinitions.ComPlusUserInPartitionRole, null, null)
38 {
39 }
40
41 public ComPlusUserInPartitionRoleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ComPlusTupleDefinitions.ComPlusUserInPartitionRole, sourceLineNumber, id)
42 {
43 }
44
45 public IntermediateField this[ComPlusUserInPartitionRoleTupleFields index] => this.Fields[(int)index];
46
47 public string UserInPartitionRole
48 {
49 get => this.Fields[(int)ComPlusUserInPartitionRoleTupleFields.UserInPartitionRole].AsString();
50 set => this.Set((int)ComPlusUserInPartitionRoleTupleFields.UserInPartitionRole, value);
51 }
52
53 public string PartitionRole_
54 {
55 get => this.Fields[(int)ComPlusUserInPartitionRoleTupleFields.PartitionRole_].AsString();
56 set => this.Set((int)ComPlusUserInPartitionRoleTupleFields.PartitionRole_, value);
57 }
58
59 public string Component_
60 {
61 get => this.Fields[(int)ComPlusUserInPartitionRoleTupleFields.Component_].AsString();
62 set => this.Set((int)ComPlusUserInPartitionRoleTupleFields.Component_, value);
63 }
64
65 public string User_
66 {
67 get => this.Fields[(int)ComPlusUserInPartitionRoleTupleFields.User_].AsString();
68 set => this.Set((int)ComPlusUserInPartitionRoleTupleFields.User_, value);
69 }
70 }
71} \ No newline at end of file
diff --git a/src/wixext/WixComPlusExtension.csproj b/src/wixext/WixComPlusExtension.csproj
deleted file mode 100644
index 92cbacae..00000000
--- a/src/wixext/WixComPlusExtension.csproj
+++ /dev/null
@@ -1,50 +0,0 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
6 <PropertyGroup>
7 <ProjectGuid>{1497B777-330B-4CFE-927A-22850CD24D64}</ProjectGuid>
8 <AssemblyName>WixComPlusExtension</AssemblyName>
9 <OutputType>Library</OutputType>
10 <RootNamespace>WixToolset.Extensions</RootNamespace>
11 </PropertyGroup>
12 <ItemGroup>
13 <Compile Include="AssemblyInfo.cs" />
14 <Compile Include="ComPlusCompiler.cs" />
15 <Compile Include="ComPlusDecompiler.cs" />
16 <Compile Include="ComPlusExtensionData.cs" />
17 <MsgGenSource Include="Data\messages.xml">
18 <ResourcesLogicalName>$(RootNamespace).Data.Messages.resources</ResourcesLogicalName>
19 </MsgGenSource>
20 <EmbeddedFlattenedResource Include="Data\tables.xml">
21 <LogicalName>$(RootNamespace).Data.tables.xml</LogicalName>
22 </EmbeddedFlattenedResource>
23 <EmbeddedFlattenedResource Include="Xsd\complus.xsd">
24 <LogicalName>$(RootNamespace).Xsd.complus.xsd</LogicalName>
25 </EmbeddedFlattenedResource>
26 <XsdGenSource Include="Xsd\complus.xsd">
27 <CommonNamespace>WixToolset.Data.Serialize</CommonNamespace>
28 <Namespace>WixToolset.Extensions.Serialize.ComPlus</Namespace>
29 </XsdGenSource>
30 <None Include="Xsd\complus.xsd">
31 <Link>complus.xsd</Link>
32 <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
33 </None>
34 <EmbeddedResource Include="$(OutputPath)\complus.wixlib">
35 <Link>Data\complus.wixlib</Link>
36 </EmbeddedResource>
37 </ItemGroup>
38 <ItemGroup>
39 <Reference Include="System" />
40 <Reference Include="System.Xml" />
41 <Reference Include="System.Xml.Linq" />
42 <ProjectReference Include="..\..\..\libs\WixToolset.Data\WixToolset.Data.csproj" />
43 <ProjectReference Include="..\..\..\libs\WixToolset.Extensibility\WixToolset.Extensibility.csproj" />
44 <ProjectReference Include="..\..\..\tools\wix\Wix.csproj" />
45 <ProjectReference Include="..\wixlib\ComPlusExtension.wixproj">
46 <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
47 </ProjectReference>
48 </ItemGroup>
49 <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.targets" />
50</Project>
diff --git a/src/wixext/WixToolset.ComPlus.wixext.csproj b/src/wixext/WixToolset.ComPlus.wixext.csproj
new file mode 100644
index 00000000..882dc7e1
--- /dev/null
+++ b/src/wixext/WixToolset.ComPlus.wixext.csproj
@@ -0,0 +1,33 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4<Project Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup>
6 <TargetFramework>netstandard2.0</TargetFramework>
7 <RootNamespace>WixToolset.ComPlus</RootNamespace>
8 <Description>WiX Toolset ComPlus Extension</Description>
9 <Title>WiX Toolset ComPlus Extension</Title>
10 <IsTool>true</IsTool>
11 <ContentTargetFolders>build</ContentTargetFolders>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <Content Include="$(MSBuildThisFileName).targets" />
16 <Content Include="complus.xsd" PackagePath="tools" />
17 <EmbeddedResource Include="tables.xml" />
18 <EmbeddedResource Include="$(OutputPath)..\complus.wixlib" />
19 </ItemGroup>
20
21 <ItemGroup>
22 <PackageReference Include="WixToolset.Data" Version="4.0.*" PrivateAssets="all" />
23 <PackageReference Include="WixToolset.Extensibility" Version="4.0.*" PrivateAssets="all" />
24 </ItemGroup>
25
26 <ItemGroup>
27 <ProjectReference Include="..\wixlib\complus.wixproj" ReferenceOutputAssembly="false" Condition=" '$(NCrunch)'=='' " />
28 </ItemGroup>
29
30 <ItemGroup>
31 <PackageReference Include="Nerdbank.GitVersioning" Version="2.1.65" PrivateAssets="all" />
32 </ItemGroup>
33</Project>
diff --git a/src/wixext/WixToolset.ComPlus.wixext.targets b/src/wixext/WixToolset.ComPlus.wixext.targets
new file mode 100644
index 00000000..8115b715
--- /dev/null
+++ b/src/wixext/WixToolset.ComPlus.wixext.targets
@@ -0,0 +1,11 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
5 <PropertyGroup>
6 <WixToolsetComPlusWixextPath Condition=" '$(WixToolsetComPlusWixextPath)' == '' ">$(MSBuildThisFileDirectory)..\tools\WixToolset.ComPlus.wixext.dll</WixToolsetComPlusWixextPath>
7 </PropertyGroup>
8 <ItemGroup>
9 <WixExtension Include="$(WixToolsetComPlusWixextPath)" />
10 </ItemGroup>
11</Project>
diff --git a/src/wixext/messages.xml b/src/wixext/messages.xml
deleted file mode 100644
index 66c0a9e6..00000000
--- a/src/wixext/messages.xml
+++ /dev/null
@@ -1,77 +0,0 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Messages Namespace="WixToolset.Extensions" Resources="Data.Messages" xmlns="http://schemas.microsoft.com/genmsgs/2004/07/messages">
6 <Class Name="ComPlusErrors" ContainerName="ComPlusErrorEventArgs" BaseContainerName="MessageEventArgs">
7 <Message Id="IllegalAttributeWithoutComponent" Number="6000">
8 <Instance>
9 The {0}/@{1} attribute cannot be specified unless the element has a component as an ancestor. A {0} that does not have a component ancestor is not installed.
10 <Parameter Type="System.String" Name="elementName" />
11 <Parameter Type="System.String" Name="attributeName" />
12 </Instance>
13 </Message>
14 <Message Id="IllegalElementWithoutComponent" Number="6001">
15 <Instance>
16 The {0} element cannot be specified unless the element has a component as an ancestor. A {0} that does not have a component ancestor is not installed.
17 <Parameter Type="System.String" Name="elementName" />
18 </Instance>
19 </Message>
20 <Message Id="UnexpectedAttributeWithOtherValue" Number="6002">
21 <Instance>
22 The {0}/@{1} attribute cannot coexist with the {2} attribute's value of '{3}'.
23 <Parameter Type="System.String" Name="elementName" />
24 <Parameter Type="System.String" Name="attributeName" />
25 <Parameter Type="System.String" Name="otherAttributeName" />
26 <Parameter Type="System.String" Name="otherValue" />
27 </Instance>
28 <Instance>
29 The {0}/@{1} attribute's value, '{2}', cannot coexist with the {3} attribute's value of '{4}'.
30 <Parameter Type="System.String" Name="elementName" />
31 <Parameter Type="System.String" Name="attributeName" />
32 <Parameter Type="System.String" Name="value" />
33 <Parameter Type="System.String" Name="otherAttributeName" />
34 <Parameter Type="System.String" Name="otherValue" />
35 </Instance>
36 </Message>
37 <Message Id="UnexpectedAttributeWithoutOtherValue" Number="6003">
38 <Instance>
39 The {0}/@{1} cannot be provided unless the {2} attribute is provided with a value of '{3}'.
40 <Parameter Type="System.String" Name="elementName" />
41 <Parameter Type="System.String" Name="attributeName" />
42 <Parameter Type="System.String" Name="otherAttributeName" />
43 <Parameter Type="System.String" Name="otherValue" />
44 </Instance>
45 </Message>
46 <Message Id="RequiredAttributeUnderComponent" Number="6004">
47 <Instance>
48 The {0}/@{1} attribute must be provided when {0} element is nested under a component.
49 <Parameter Type="System.String" Name="elementName" />
50 <Parameter Type="System.String" Name="attributeName" />
51 </Instance>
52 </Message>
53 <Message Id="RequiredAttribute" Number="6005">
54 <Instance>
55 A {0} element must have either a {1} attribute or a {2} attribute, or both set.
56 <Parameter Type="System.String" Name="elementName" />
57 <Parameter Type="System.String" Name="attributeName1" />
58 <Parameter Type="System.String" Name="attributeName2" />
59 </Instance>
60 </Message>
61 <Message Id="RequiredAttributeNotUnderComponent" Number="6006">
62 <Instance>
63 A {0} element not nested under a component must have either a {1} attribute or a {2} attribute, or both set.
64 <Parameter Type="System.String" Name="elementName" />
65 <Parameter Type="System.String" Name="attributeName1" />
66 <Parameter Type="System.String" Name="attributeName2" />
67 </Instance>
68 </Message>
69 </Class>
70 <Class Name="ComPlusWarnings" ContainerName="ComPlusWarningEventArgs" BaseContainerName="MessageEventArgs">
71 <Message Id="MissingComponents" Number="6007">
72 <Instance>The ComPlusAssembly element has a Type attribute with a value of 'native', but the element does not contain any ComPlusComponent elements. All components contained in a native assembly must be listed, or they will not be correctly removed during uninstall.</Instance>
73 </Message>
74 </Class>
75 <Class Name="ComPlusVerboses" ContainerName="ComPlusVerboseEventArgs" BaseContainerName="MessageEventArgs">
76 </Class>
77</Messages>