aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-04-05 21:01:32 +1000
committerSean Hall <r.sean.hall@gmail.com>2020-04-05 21:48:37 +1000
commitba3a735e21086722c64caa001d618e5505a2e656 (patch)
tree46eb62b56152b2a5d19998f4bca157742cfc4b4d
parent98eb2a20bb786ec2d2ee4b9bb02e33477d0215c2 (diff)
downloadwix-ba3a735e21086722c64caa001d618e5505a2e656.tar.gz
wix-ba3a735e21086722c64caa001d618e5505a2e656.tar.bz2
wix-ba3a735e21086722c64caa001d618e5505a2e656.zip
Modernize IIsCompiler and tuples.
-rw-r--r--src/test/WixToolsetTest.Iis/WixToolsetTest.Iis.csproj2
-rw-r--r--src/wixext/IIsCompiler.cs589
-rw-r--r--src/wixext/IisTableDefinitions.cs324
-rw-r--r--src/wixext/IisWindowsInstallerBackendBinderExtension.cs25
-rw-r--r--src/wixext/Tuples/CertificateHashTuple.cs10
-rw-r--r--src/wixext/Tuples/CertificateTuple.cs28
-rw-r--r--src/wixext/Tuples/IIsAppPoolTuple.cs28
-rw-r--r--src/wixext/Tuples/IIsFilterTuple.cs28
-rw-r--r--src/wixext/Tuples/IIsMimeMapTuple.cs8
-rw-r--r--src/wixext/Tuples/IIsPropertyTuple.cs18
-rw-r--r--src/wixext/Tuples/IIsWebAddressTuple.cs18
-rw-r--r--src/wixext/Tuples/IIsWebApplicationExtensionTuple.cs10
-rw-r--r--src/wixext/Tuples/IIsWebApplicationTuple.cs18
-rw-r--r--src/wixext/Tuples/IIsWebDirPropertiesTuple.cs18
-rw-r--r--src/wixext/Tuples/IIsWebDirTuple.cs48
-rw-r--r--src/wixext/Tuples/IIsWebLogTuple.cs8
-rw-r--r--src/wixext/Tuples/IIsWebServiceExtensionTuple.cs18
-rw-r--r--src/wixext/Tuples/IIsWebSiteCertificatesTuple.cs20
-rw-r--r--src/wixext/Tuples/IIsWebSiteTuple.cs68
-rw-r--r--src/wixext/Tuples/IIsWebVirtualDirTuple.cs58
-rw-r--r--src/wixext/WixToolset.Iis.wixext.csproj1
-rw-r--r--src/wixext/tables.xml304
-rw-r--r--src/wixlib/iis.wixproj4
-rw-r--r--src/wixlib/packages.config2
24 files changed, 807 insertions, 848 deletions
diff --git a/src/test/WixToolsetTest.Iis/WixToolsetTest.Iis.csproj b/src/test/WixToolsetTest.Iis/WixToolsetTest.Iis.csproj
index 66e4edc6..49ed89bc 100644
--- a/src/test/WixToolsetTest.Iis/WixToolsetTest.Iis.csproj
+++ b/src/test/WixToolsetTest.Iis/WixToolsetTest.Iis.csproj
@@ -3,7 +3,7 @@
3 3
4<Project Sdk="Microsoft.NET.Sdk"> 4<Project Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup> 5 <PropertyGroup>
6 <TargetFramework>netcoreapp2.1</TargetFramework> 6 <TargetFramework>netcoreapp3.1</TargetFramework>
7 <IsPackable>false</IsPackable> 7 <IsPackable>false</IsPackable>
8 </PropertyGroup> 8 </PropertyGroup>
9 9
diff --git a/src/wixext/IIsCompiler.cs b/src/wixext/IIsCompiler.cs
index e28435b6..f84f8f0a 100644
--- a/src/wixext/IIsCompiler.cs
+++ b/src/wixext/IIsCompiler.cs
@@ -8,6 +8,7 @@ namespace WixToolset.Iis
8 using System.Xml.Linq; 8 using System.Xml.Linq;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Extensibility; 10 using WixToolset.Extensibility;
11 using WixToolset.Iis.Tuples;
11 12
12 /// <summary> 13 /// <summary>
13 /// The compiler for the WiX Toolset Internet Information Services Extension. 14 /// The compiler for the WiX Toolset Internet Information Services Extension.
@@ -64,8 +65,8 @@ namespace WixToolset.Iis
64 switch (parentElement.Name.LocalName) 65 switch (parentElement.Name.LocalName)
65 { 66 {
66 case "Component": 67 case "Component":
67 string componentId = context["ComponentId"]; 68 var componentId = context["ComponentId"];
68 string directoryId = context["DirectoryId"]; 69 var directoryId = context["DirectoryId"];
69 70
70 switch (element.Name.LocalName) 71 switch (element.Name.LocalName)
71 { 72 {
@@ -110,7 +111,7 @@ namespace WixToolset.Iis
110 this.ParseWebAppPoolElement(intermediate, section, element, null); 111 this.ParseWebAppPoolElement(intermediate, section, element, null);
111 break; 112 break;
112 case "WebDirProperties": 113 case "WebDirProperties":
113 this.ParseWebDirPropertiesElement(intermediate, section, element); 114 this.ParseWebDirPropertiesElement(intermediate, section, element, null);
114 break; 115 break;
115 case "WebLog": 116 case "WebLog":
116 this.ParseWebLogElement(intermediate, section, element); 117 this.ParseWebLogElement(intermediate, section, element);
@@ -136,7 +137,7 @@ namespace WixToolset.Iis
136 /// <param name="componentId">Identifier for parent component.</param> 137 /// <param name="componentId">Identifier for parent component.</param>
137 private void ParseCertificateElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId) 138 private void ParseCertificateElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId)
138 { 139 {
139 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 140 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
140 Identifier id = null; 141 Identifier id = null;
141 int attributes = 0; 142 int attributes = 0;
142 string binaryKey = null; 143 string binaryKey = null;
@@ -146,7 +147,7 @@ namespace WixToolset.Iis
146 int storeLocation = 0; 147 int storeLocation = 0;
147 string storeName = null; 148 string storeName = null;
148 149
149 foreach (XAttribute attrib in element.Attributes()) 150 foreach (var attrib in element.Attributes())
150 { 151 {
151 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 152 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
152 { 153 {
@@ -158,7 +159,7 @@ namespace WixToolset.Iis
158 case "BinaryKey": 159 case "BinaryKey":
159 attributes |= 2; // SCA_CERT_ATTRIBUTE_BINARYDATA 160 attributes |= 2; // SCA_CERT_ATTRIBUTE_BINARYDATA
160 binaryKey = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 161 binaryKey = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
161 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Binary", binaryKey); 162 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.Binary, binaryKey);
162 break; 163 break;
163 case "CertificatePath": 164 case "CertificatePath":
164 certificatePath = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 165 certificatePath = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -190,7 +191,7 @@ namespace WixToolset.Iis
190 } 191 }
191 break; 192 break;
192 case "StoreLocation": 193 case "StoreLocation":
193 string storeLocationValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 194 var storeLocationValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
194 if (0 < storeLocationValue.Length) 195 if (0 < storeLocationValue.Length)
195 { 196 {
196 switch (storeLocationValue) 197 switch (storeLocationValue)
@@ -209,7 +210,7 @@ namespace WixToolset.Iis
209 } 210 }
210 break; 211 break;
211 case "StoreName": 212 case "StoreName":
212 string storeNameValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 213 var storeNameValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
213 if (0 < storeNameValue.Length) 214 if (0 < storeNameValue.Length)
214 { 215 {
215 switch (storeNameValue) 216 switch (storeNameValue)
@@ -256,7 +257,7 @@ namespace WixToolset.Iis
256 257
257 if (null == id) 258 if (null == id)
258 { 259 {
259 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id")); 260 id = this.ParseHelper.CreateIdentifier("crt", componentId, binaryKey, certificatePath);
260 } 261 }
261 262
262 if (null == name) 263 if (null == name)
@@ -286,21 +287,23 @@ namespace WixToolset.Iis
286 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); 287 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
287 288
288 // Reference InstallCertificates and UninstallCertificates since nothing will happen without them 289 // Reference InstallCertificates and UninstallCertificates since nothing will happen without them
289 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "InstallCertificates"); 290 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.CustomAction, "InstallCertificates");
290 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "UninstallCertificates"); 291 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.CustomAction, "UninstallCertificates");
291 this.ParseHelper.EnsureTable(section, sourceLineNumbers, "CertificateHash"); // Certificate CustomActions require the CertificateHash table 292 this.ParseHelper.EnsureTable(section, sourceLineNumbers, IisTableDefinitions.CertificateHash); // Certificate CustomActions require the CertificateHash table
292 293
293 if (!this.Messaging.EncounteredError) 294 if (!this.Messaging.EncounteredError)
294 { 295 {
295 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "Certificate", id); 296 section.AddTuple(new CertificateTuple(sourceLineNumbers, id)
296 row.Set(1, componentId); 297 {
297 row.Set(2, name); 298 ComponentRef = componentId,
298 row.Set(3, storeLocation); 299 Name = name,
299 row.Set(4, storeName); 300 StoreLocation = storeLocation,
300 row.Set(5, attributes); 301 StoreName = storeName,
301 row.Set(6, binaryKey); 302 Attributes = attributes,
302 row.Set(7, certificatePath); 303 BinaryRef = binaryKey,
303 row.Set(8, pfxPassword); 304 CertificatePath = certificatePath,
305 PFXPassword = pfxPassword,
306 });
304 } 307 }
305 } 308 }
306 309
@@ -311,10 +314,10 @@ namespace WixToolset.Iis
311 /// <param name="webId">Identifier for parent web site.</param> 314 /// <param name="webId">Identifier for parent web site.</param>
312 private void ParseCertificateRefElement(Intermediate intermediate, IntermediateSection section, XElement element, string webId) 315 private void ParseCertificateRefElement(Intermediate intermediate, IntermediateSection section, XElement element, string webId)
313 { 316 {
314 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 317 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
315 Identifier id = null; 318 Identifier id = null;
316 319
317 foreach (XAttribute attrib in element.Attributes()) 320 foreach (var attrib in element.Attributes())
318 { 321 {
319 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 322 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
320 { 323 {
@@ -322,7 +325,7 @@ namespace WixToolset.Iis
322 { 325 {
323 case "Id": 326 case "Id":
324 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib); 327 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
325 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Certificate", id.Id); 328 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.Certificate, id.Id);
326 break; 329 break;
327 default: 330 default:
328 this.ParseHelper.UnexpectedAttribute(element, attrib); 331 this.ParseHelper.UnexpectedAttribute(element, attrib);
@@ -337,18 +340,20 @@ namespace WixToolset.Iis
337 340
338 if (null == id) 341 if (null == id)
339 { 342 {
340 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id")); 343 id = this.ParseHelper.CreateIdentifier("wsc", webId);
341 } 344 }
342 345
343 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); 346 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
344 347
345 if (!this.Messaging.EncounteredError) 348 if (!this.Messaging.EncounteredError)
346 { 349 {
347 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Certificate", id.Id); 350 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.Certificate, id.Id);
348 351
349 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsWebSiteCertificates"); 352 section.AddTuple(new IIsWebSiteCertificatesTuple(sourceLineNumbers)
350 row.Set(0, webId); 353 {
351 row.Set(1, id.Id); 354 WebRef = webId,
355 CertificateRef = id.Id,
356 });
352 } 357 }
353 } 358 }
354 359
@@ -360,12 +365,12 @@ namespace WixToolset.Iis
360 /// <param name="parentType">Type that parentId refers to.</param> 365 /// <param name="parentType">Type that parentId refers to.</param>
361 private void ParseMimeMapElement(Intermediate intermediate, IntermediateSection section, XElement element, string parentId, MimeMapParentType parentType) 366 private void ParseMimeMapElement(Intermediate intermediate, IntermediateSection section, XElement element, string parentId, MimeMapParentType parentType)
362 { 367 {
363 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 368 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
364 Identifier id = null; 369 Identifier id = null;
365 string extension = null; 370 string extension = null;
366 string type = null; 371 string type = null;
367 372
368 foreach (XAttribute attrib in element.Attributes()) 373 foreach (var attrib in element.Attributes())
369 { 374 {
370 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 375 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
371 { 376 {
@@ -393,7 +398,7 @@ namespace WixToolset.Iis
393 398
394 if (null == id) 399 if (null == id)
395 { 400 {
396 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id")); 401 id = this.ParseHelper.CreateIdentifier("imm", parentId, type, extension);
397 } 402 }
398 403
399 if (null == extension) 404 if (null == extension)
@@ -417,11 +422,13 @@ namespace WixToolset.Iis
417 422
418 if (!this.Messaging.EncounteredError) 423 if (!this.Messaging.EncounteredError)
419 { 424 {
420 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsMimeMap", id); 425 section.AddTuple(new IIsMimeMapTuple(sourceLineNumbers, id)
421 row.Set(1, (int)parentType); 426 {
422 row.Set(2, parentId); 427 ParentType = (int)parentType,
423 row.Set(3, type); 428 ParentValue = parentId,
424 row.Set(4, extension); 429 MimeType = type,
430 Extension = extension,
431 });
425 } 432 }
426 } 433 }
427 434
@@ -432,10 +439,10 @@ namespace WixToolset.Iis
432 /// <returns>Recycle time value.</returns> 439 /// <returns>Recycle time value.</returns>
433 private string ParseRecycleTimeElement(Intermediate intermediate, IntermediateSection section, XElement element) 440 private string ParseRecycleTimeElement(Intermediate intermediate, IntermediateSection section, XElement element)
434 { 441 {
435 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 442 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
436 string value = null; 443 string value = null;
437 444
438 foreach (XAttribute attrib in element.Attributes()) 445 foreach (var attrib in element.Attributes())
439 { 446 {
440 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 447 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
441 { 448 {
@@ -473,14 +480,14 @@ namespace WixToolset.Iis
473 /// <returns>Identifier for web address.</returns> 480 /// <returns>Identifier for web address.</returns>
474 private string ParseWebAddressElement(Intermediate intermediate, IntermediateSection section, XElement element, string parentWeb) 481 private string ParseWebAddressElement(Intermediate intermediate, IntermediateSection section, XElement element, string parentWeb)
475 { 482 {
476 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 483 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
477 Identifier id = null; 484 Identifier id = null;
478 string header = null; 485 string header = null;
479 string ip = null; 486 string ip = null;
480 string port = null; 487 string port = null;
481 bool secure = false; 488 var secure = false;
482 489
483 foreach (XAttribute attrib in element.Attributes()) 490 foreach (var attrib in element.Attributes())
484 { 491 {
485 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 492 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
486 { 493 {
@@ -514,7 +521,7 @@ namespace WixToolset.Iis
514 521
515 if (null == id) 522 if (null == id)
516 { 523 {
517 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id")); 524 id = this.ParseHelper.CreateIdentifier("iwa", parentWeb, ip, port);
518 } 525 }
519 526
520 if (null == port) 527 if (null == port)
@@ -526,12 +533,14 @@ namespace WixToolset.Iis
526 533
527 if (!this.Messaging.EncounteredError) 534 if (!this.Messaging.EncounteredError)
528 { 535 {
529 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsWebAddress", id); 536 section.AddTuple(new IIsWebAddressTuple(sourceLineNumbers, id)
530 row.Set(1, parentWeb); 537 {
531 row.Set(2, ip); 538 WebRef = parentWeb,
532 row.Set(3, port); 539 IP = ip,
533 row.Set(4, header); 540 Port = port,
534 row.Set(5, secure ? 1 : 0); 541 Header = header,
542 Secure = secure ? 1 : 0,
543 });
535 } 544 }
536 545
537 return id?.Id; 546 return id?.Id;
@@ -544,21 +553,21 @@ namespace WixToolset.Iis
544 /// <returns>Identifier for web application.</returns> 553 /// <returns>Identifier for web application.</returns>
545 private string ParseWebApplicationElement(Intermediate intermediate, IntermediateSection section, XElement element) 554 private string ParseWebApplicationElement(Intermediate intermediate, IntermediateSection section, XElement element)
546 { 555 {
547 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 556 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
548 Identifier id = null; 557 Identifier id = null;
549 YesNoDefaultType allowSessions = YesNoDefaultType.Default; 558 var allowSessions = YesNoDefaultType.Default;
550 string appPool = null; 559 string appPool = null;
551 YesNoDefaultType buffer = YesNoDefaultType.Default; 560 var buffer = YesNoDefaultType.Default;
552 YesNoDefaultType clientDebugging = YesNoDefaultType.Default; 561 var clientDebugging = YesNoDefaultType.Default;
553 string defaultScript = null; 562 string defaultScript = null;
554 int isolation = 0; 563 int isolation = 0;
555 string name = null; 564 string name = null;
556 YesNoDefaultType parentPaths = YesNoDefaultType.Default; 565 var parentPaths = YesNoDefaultType.Default;
557 int scriptTimeout = CompilerConstants.IntegerNotSet; 566 var scriptTimeout = CompilerConstants.IntegerNotSet;
558 int sessionTimeout = CompilerConstants.IntegerNotSet; 567 var sessionTimeout = CompilerConstants.IntegerNotSet;
559 YesNoDefaultType serverDebugging = YesNoDefaultType.Default; 568 var serverDebugging = YesNoDefaultType.Default;
560 569
561 foreach (XAttribute attrib in element.Attributes()) 570 foreach (var attrib in element.Attributes())
562 { 571 {
563 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 572 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
564 { 573 {
@@ -630,7 +639,7 @@ namespace WixToolset.Iis
630 break; 639 break;
631 case "WebAppPool": 640 case "WebAppPool":
632 appPool = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 641 appPool = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
633 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "IIsAppPool", appPool); 642 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.IIsAppPool, appPool);
634 break; 643 break;
635 default: 644 default:
636 this.ParseHelper.UnexpectedAttribute(element, attrib); 645 this.ParseHelper.UnexpectedAttribute(element, attrib);
@@ -645,7 +654,7 @@ namespace WixToolset.Iis
645 654
646 if (null == id) 655 if (null == id)
647 { 656 {
648 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id")); 657 id = this.ParseHelper.CreateIdentifier("wap", name, appPool);
649 } 658 }
650 659
651 if (null == name) 660 if (null == name)
@@ -657,11 +666,10 @@ namespace WixToolset.Iis
657 this.Messaging.Write(IIsErrors.IllegalCharacterInAttributeValue(sourceLineNumbers, element.Name.LocalName, "Name", name, '\\')); 666 this.Messaging.Write(IIsErrors.IllegalCharacterInAttributeValue(sourceLineNumbers, element.Name.LocalName, "Name", name, '\\'));
658 } 667 }
659 668
660 foreach (XElement child in element.Elements()) 669 foreach (var child in element.Elements())
661 { 670 {
662 if (this.Namespace == child.Name.Namespace) 671 if (this.Namespace == child.Name.Namespace)
663 { 672 {
664 SourceLineNumber childSourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(child);
665 switch (child.Name.LocalName) 673 switch (child.Name.LocalName)
666 { 674 {
667 case "WebApplicationExtension": 675 case "WebApplicationExtension":
@@ -680,44 +688,48 @@ namespace WixToolset.Iis
680 688
681 if (!this.Messaging.EncounteredError) 689 if (!this.Messaging.EncounteredError)
682 { 690 {
683 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsWebApplication", id); 691 var tuple = section.AddTuple(new IIsWebApplicationTuple(sourceLineNumbers, id)
684 row.Set(1, name); 692 {
685 row.Set(2, isolation); 693 Name = name,
694 Isolation = isolation,
695 DefaultScript = defaultScript,
696 AppPoolRef = appPool,
697 });
698
686 if (YesNoDefaultType.Default != allowSessions) 699 if (YesNoDefaultType.Default != allowSessions)
687 { 700 {
688 row.Set(3, YesNoDefaultType.Yes == allowSessions ? 1 : 0); 701 tuple.AllowSessions = YesNoDefaultType.Yes == allowSessions ? 1 : 0;
689 } 702 }
690 703
691 if (CompilerConstants.IntegerNotSet != sessionTimeout) 704 if (CompilerConstants.IntegerNotSet != sessionTimeout)
692 { 705 {
693 row.Set(4, sessionTimeout); 706 tuple.SessionTimeout = sessionTimeout;
694 } 707 }
695 708
696 if (YesNoDefaultType.Default != buffer) 709 if (YesNoDefaultType.Default != buffer)
697 { 710 {
698 row.Set(5, YesNoDefaultType.Yes == buffer ? 1 : 0); 711 tuple.Buffer = YesNoDefaultType.Yes == buffer ? 1 : 0;
699 } 712 }
700 713
701 if (YesNoDefaultType.Default != parentPaths) 714 if (YesNoDefaultType.Default != parentPaths)
702 { 715 {
703 row.Set(6, YesNoDefaultType.Yes == parentPaths ? 1 : 0); 716 tuple.ParentPaths = YesNoDefaultType.Yes == parentPaths ? 1 : 0;
704 } 717 }
705 row.Set(7, defaultScript); 718
706 if (CompilerConstants.IntegerNotSet != scriptTimeout) 719 if (CompilerConstants.IntegerNotSet != scriptTimeout)
707 { 720 {
708 row.Set(8, scriptTimeout); 721 tuple.ScriptTimeout = scriptTimeout;
709 } 722 }
710 723
711 if (YesNoDefaultType.Default != serverDebugging) 724 if (YesNoDefaultType.Default != serverDebugging)
712 { 725 {
713 row.Set(9, YesNoDefaultType.Yes == serverDebugging ? 1 : 0); 726 tuple.ServerDebugging = YesNoDefaultType.Yes == serverDebugging ? 1 : 0;
714 } 727 }
715 728
716 if (YesNoDefaultType.Default != clientDebugging) 729 if (YesNoDefaultType.Default != clientDebugging)
717 { 730 {
718 row.Set(10, YesNoDefaultType.Yes == clientDebugging ? 1 : 0); 731 tuple.ClientDebugging = YesNoDefaultType.Yes == clientDebugging ? 1 : 0;
719 } 732 }
720 row.Set(11, appPool);
721 } 733 }
722 734
723 return id?.Id; 735 return id?.Id;
@@ -730,13 +742,13 @@ namespace WixToolset.Iis
730 /// <param name="application">Identifier for parent web application.</param> 742 /// <param name="application">Identifier for parent web application.</param>
731 private void ParseWebApplicationExtensionElement(Intermediate intermediate, IntermediateSection section, XElement element, string application) 743 private void ParseWebApplicationExtensionElement(Intermediate intermediate, IntermediateSection section, XElement element, string application)
732 { 744 {
733 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 745 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
734 int attributes = 0; 746 int attributes = 0;
735 string executable = null; 747 string executable = null;
736 string extension = null; 748 string extension = null;
737 string verbs = null; 749 string verbs = null;
738 750
739 foreach (XAttribute attrib in element.Attributes()) 751 foreach (var attrib in element.Attributes())
740 { 752 {
741 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 753 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
742 { 754 {
@@ -786,14 +798,17 @@ namespace WixToolset.Iis
786 798
787 if (!this.Messaging.EncounteredError) 799 if (!this.Messaging.EncounteredError)
788 { 800 {
789 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsWebApplicationExtension"); 801 var tuple = section.AddTuple(new IIsWebApplicationExtensionTuple(sourceLineNumbers)
790 row.Set(0, application); 802 {
791 row.Set(1, extension); 803 ApplicationRef = application,
792 row.Set(2, verbs); 804 Extension = extension,
793 row.Set(3, executable); 805 Verbs = verbs,
806 Executable = executable,
807 });
808
794 if (0 < attributes) 809 if (0 < attributes)
795 { 810 {
796 row.Set(4, attributes); 811 tuple.Attributes = attributes;
797 } 812 }
798 } 813 }
799 } 814 }
@@ -805,27 +820,27 @@ namespace WixToolset.Iis
805 /// <param name="componentId">Optional identifier of parent component.</param> 820 /// <param name="componentId">Optional identifier of parent component.</param>
806 private void ParseWebAppPoolElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId) 821 private void ParseWebAppPoolElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId)
807 { 822 {
808 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 823 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
809 Identifier id = null; 824 Identifier id = null;
810 int attributes = 0; 825 int attributes = 0;
811 int cpuAction = CompilerConstants.IntegerNotSet; 826 var cpuAction = CompilerConstants.IntegerNotSet;
812 string cpuMon = null; 827 string cpuMon = null;
813 int idleTimeout = CompilerConstants.IntegerNotSet; 828 var idleTimeout = CompilerConstants.IntegerNotSet;
814 int maxCpuUsage = 0; 829 int maxCpuUsage = 0;
815 int maxWorkerProcs = CompilerConstants.IntegerNotSet; 830 var maxWorkerProcs = CompilerConstants.IntegerNotSet;
816 string managedRuntimeVersion = null; 831 string managedRuntimeVersion = null;
817 string managedPipelineMode = null; 832 string managedPipelineMode = null;
818 string name = null; 833 string name = null;
819 int privateMemory = CompilerConstants.IntegerNotSet; 834 var privateMemory = CompilerConstants.IntegerNotSet;
820 int queueLimit = CompilerConstants.IntegerNotSet; 835 var queueLimit = CompilerConstants.IntegerNotSet;
821 int recycleMinutes = CompilerConstants.IntegerNotSet; 836 var recycleMinutes = CompilerConstants.IntegerNotSet;
822 int recycleRequests = CompilerConstants.IntegerNotSet; 837 var recycleRequests = CompilerConstants.IntegerNotSet;
823 string recycleTimes = null; 838 string recycleTimes = null;
824 int refreshCpu = CompilerConstants.IntegerNotSet; 839 var refreshCpu = CompilerConstants.IntegerNotSet;
825 string user = null; 840 string user = null;
826 int virtualMemory = CompilerConstants.IntegerNotSet; 841 var virtualMemory = CompilerConstants.IntegerNotSet;
827 842
828 foreach (XAttribute attrib in element.Attributes()) 843 foreach (var attrib in element.Attributes())
829 { 844 {
830 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 845 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
831 { 846 {
@@ -840,7 +855,7 @@ namespace WixToolset.Iis
840 this.Messaging.Write(IIsErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, element.Name.LocalName, attrib.Name.LocalName)); 855 this.Messaging.Write(IIsErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, element.Name.LocalName, attrib.Name.LocalName));
841 } 856 }
842 857
843 string cpuActionValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 858 var cpuActionValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
844 if (0 < cpuActionValue.Length) 859 if (0 < cpuActionValue.Length)
845 { 860 {
846 switch (cpuActionValue) 861 switch (cpuActionValue)
@@ -863,7 +878,7 @@ namespace WixToolset.Iis
863 this.Messaging.Write(IIsErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, element.Name.LocalName, attrib.Name.LocalName)); 878 this.Messaging.Write(IIsErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, element.Name.LocalName, attrib.Name.LocalName));
864 } 879 }
865 880
866 string identityValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 881 var identityValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
867 if (0 < identityValue.Length) 882 if (0 < identityValue.Length)
868 { 883 {
869 switch (identityValue) 884 switch (identityValue)
@@ -1029,7 +1044,7 @@ namespace WixToolset.Iis
1029 1044
1030 if (null == id) 1045 if (null == id)
1031 { 1046 {
1032 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id")); 1047 id = this.ParseHelper.CreateIdentifier("iap", name, componentId, user);
1033 } 1048 }
1034 1049
1035 if (null == name) 1050 if (null == name)
@@ -1057,7 +1072,7 @@ namespace WixToolset.Iis
1057 } 1072 }
1058 } 1073 }
1059 1074
1060 foreach (XElement child in element.Elements()) 1075 foreach (var child in element.Elements())
1061 { 1076 {
1062 if (this.Namespace == child.Name.Namespace) 1077 if (this.Namespace == child.Name.Namespace)
1063 { 1078 {
@@ -1066,7 +1081,7 @@ namespace WixToolset.Iis
1066 case "RecycleTime": 1081 case "RecycleTime":
1067 if (null == componentId) 1082 if (null == componentId)
1068 { 1083 {
1069 SourceLineNumber childSourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(child); 1084 var childSourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(child);
1070 this.Messaging.Write(IIsErrors.IllegalElementWithoutComponent(childSourceLineNumbers, element.Name.LocalName)); 1085 this.Messaging.Write(IIsErrors.IllegalElementWithoutComponent(childSourceLineNumbers, element.Name.LocalName));
1071 } 1086 }
1072 1087
@@ -1093,52 +1108,57 @@ namespace WixToolset.Iis
1093 if (null != componentId) 1108 if (null != componentId)
1094 { 1109 {
1095 // Reference ConfigureIIs since nothing will happen without it 1110 // Reference ConfigureIIs since nothing will happen without it
1096 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureIIs"); 1111 this.AddReferenceToConfigureIIs(section, sourceLineNumbers);
1097 } 1112 }
1098 1113
1099 if (!this.Messaging.EncounteredError) 1114 if (!this.Messaging.EncounteredError)
1100 { 1115 {
1101 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsAppPool", id); 1116 var tuple = section.AddTuple(new IIsAppPoolTuple(sourceLineNumbers, id)
1102 row.Set(1, name); 1117 {
1103 row.Set(2, componentId); 1118 Name = name,
1104 row.Set(3, attributes); 1119 ComponentRef = componentId,
1105 row.Set(4, user); 1120 Attributes = attributes,
1121 UserRef = user,
1122 RecycleTimes = recycleTimes,
1123 CPUMon = cpuMon,
1124 ManagedRuntimeVersion = managedRuntimeVersion,
1125 ManagedPipelineMode = managedPipelineMode,
1126 });
1127
1106 if (CompilerConstants.IntegerNotSet != recycleMinutes) 1128 if (CompilerConstants.IntegerNotSet != recycleMinutes)
1107 { 1129 {
1108 row.Set(5, recycleMinutes); 1130 tuple.RecycleMinutes = recycleMinutes;
1109 } 1131 }
1110 1132
1111 if (CompilerConstants.IntegerNotSet != recycleRequests) 1133 if (CompilerConstants.IntegerNotSet != recycleRequests)
1112 { 1134 {
1113 row.Set(6, recycleRequests); 1135 tuple.RecycleRequests = recycleRequests;
1114 } 1136 }
1115 row.Set(7, recycleTimes); 1137
1116 if (CompilerConstants.IntegerNotSet != idleTimeout) 1138 if (CompilerConstants.IntegerNotSet != idleTimeout)
1117 { 1139 {
1118 row.Set(8, idleTimeout); 1140 tuple.IdleTimeout = idleTimeout;
1119 } 1141 }
1120 1142
1121 if (CompilerConstants.IntegerNotSet != queueLimit) 1143 if (CompilerConstants.IntegerNotSet != queueLimit)
1122 { 1144 {
1123 row.Set(9, queueLimit); 1145 tuple.QueueLimit = queueLimit;
1124 } 1146 }
1125 row.Set(10, cpuMon); 1147
1126 if (CompilerConstants.IntegerNotSet != maxWorkerProcs) 1148 if (CompilerConstants.IntegerNotSet != maxWorkerProcs)
1127 { 1149 {
1128 row.Set(11, maxWorkerProcs); 1150 tuple.MaxProc = maxWorkerProcs;
1129 } 1151 }
1130 1152
1131 if (CompilerConstants.IntegerNotSet != virtualMemory) 1153 if (CompilerConstants.IntegerNotSet != virtualMemory)
1132 { 1154 {
1133 row.Set(12, virtualMemory); 1155 tuple.VirtualMemory = virtualMemory;
1134 } 1156 }
1135 1157
1136 if (CompilerConstants.IntegerNotSet != privateMemory) 1158 if (CompilerConstants.IntegerNotSet != privateMemory)
1137 { 1159 {
1138 row.Set(13, privateMemory); 1160 tuple.PrivateMemory = privateMemory;
1139 } 1161 }
1140 row.Set(14, managedRuntimeVersion);
1141 row.Set(15, managedPipelineMode);
1142 } 1162 }
1143 } 1163 }
1144 1164
@@ -1150,13 +1170,13 @@ namespace WixToolset.Iis
1150 /// <param name="parentWeb">Optional identifier for parent web site.</param> 1170 /// <param name="parentWeb">Optional identifier for parent web site.</param>
1151 private void ParseWebDirElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId, string parentWeb) 1171 private void ParseWebDirElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId, string parentWeb)
1152 { 1172 {
1153 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 1173 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
1154 Identifier id = null; 1174 Identifier id = null;
1155 string dirProperties = null; 1175 string dirProperties = null;
1156 string path = null; 1176 string path = null;
1157 string application = null; 1177 string application = null;
1158 1178
1159 foreach (XAttribute attrib in element.Attributes()) 1179 foreach (var attrib in element.Attributes())
1160 { 1180 {
1161 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 1181 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
1162 { 1182 {
@@ -1181,7 +1201,7 @@ namespace WixToolset.Iis
1181 } 1201 }
1182 1202
1183 parentWeb = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1203 parentWeb = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1184 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "IIsWebSite", parentWeb); 1204 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.IIsWebSite, parentWeb);
1185 break; 1205 break;
1186 default: 1206 default:
1187 this.ParseHelper.UnexpectedAttribute(element, attrib); 1207 this.ParseHelper.UnexpectedAttribute(element, attrib);
@@ -1196,7 +1216,7 @@ namespace WixToolset.Iis
1196 1216
1197 if (null == id) 1217 if (null == id)
1198 { 1218 {
1199 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id")); 1219 id = this.ParseHelper.CreateIdentifier("iwd", componentId, parentWeb, dirProperties, application);
1200 } 1220 }
1201 1221
1202 if (null == path) 1222 if (null == path)
@@ -1209,11 +1229,11 @@ namespace WixToolset.Iis
1209 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "WebSite")); 1229 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "WebSite"));
1210 } 1230 }
1211 1231
1212 foreach (XElement child in element.Elements()) 1232 foreach (var child in element.Elements())
1213 { 1233 {
1214 if (this.Namespace == child.Name.Namespace) 1234 if (this.Namespace == child.Name.Namespace)
1215 { 1235 {
1216 SourceLineNumber childSourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(child); 1236 var childSourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(child);
1217 switch (child.Name.LocalName) 1237 switch (child.Name.LocalName)
1218 { 1238 {
1219 case "WebApplication": 1239 case "WebApplication":
@@ -1230,7 +1250,7 @@ namespace WixToolset.Iis
1230 this.Messaging.Write(IIsErrors.IllegalElementWithoutComponent(childSourceLineNumbers, child.Name.LocalName)); 1250 this.Messaging.Write(IIsErrors.IllegalElementWithoutComponent(childSourceLineNumbers, child.Name.LocalName));
1231 } 1251 }
1232 1252
1233 string childWebDirProperties = this.ParseWebDirPropertiesElement(intermediate, section, child); 1253 string childWebDirProperties = this.ParseWebDirPropertiesElement(intermediate, section, child, componentId);
1234 if (null == dirProperties) 1254 if (null == dirProperties)
1235 { 1255 {
1236 dirProperties = childWebDirProperties; 1256 dirProperties = childWebDirProperties;
@@ -1258,22 +1278,24 @@ namespace WixToolset.Iis
1258 1278
1259 if (null != application) 1279 if (null != application)
1260 { 1280 {
1261 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "IIsWebApplication", application); 1281 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.IIsWebApplication, application);
1262 } 1282 }
1263 1283
1264 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "IIsWebDirProperties", dirProperties); 1284 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.IIsWebDirProperties, dirProperties);
1265 1285
1266 // Reference ConfigureIIs since nothing will happen without it 1286 // Reference ConfigureIIs since nothing will happen without it
1267 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureIIs"); 1287 this.AddReferenceToConfigureIIs(section, sourceLineNumbers);
1268 1288
1269 if (!this.Messaging.EncounteredError) 1289 if (!this.Messaging.EncounteredError)
1270 { 1290 {
1271 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsWebDir", id); 1291 section.AddTuple(new IIsWebDirTuple(sourceLineNumbers, id)
1272 row.Set(1, componentId); 1292 {
1273 row.Set(2, parentWeb); 1293 ComponentRef = componentId,
1274 row.Set(3, path); 1294 WebRef = parentWeb,
1275 row.Set(4, dirProperties); 1295 Path = path,
1276 row.Set(5, application); 1296 DirPropertiesRef = dirProperties,
1297 ApplicationRef = application,
1298 });
1277 } 1299 }
1278 } 1300 }
1279 1301
@@ -1282,29 +1304,29 @@ namespace WixToolset.Iis
1282 /// </summary> 1304 /// </summary>
1283 /// <param name="element">Element to parse.</param> 1305 /// <param name="element">Element to parse.</param>
1284 /// <returns>The identifier for this WebDirProperties.</returns> 1306 /// <returns>The identifier for this WebDirProperties.</returns>
1285 private string ParseWebDirPropertiesElement(Intermediate intermediate, IntermediateSection section, XElement element) 1307 private string ParseWebDirPropertiesElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId)
1286 { 1308 {
1287 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 1309 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
1288 Identifier id = null; 1310 Identifier id = null;
1289 int access = 0; 1311 int access = 0;
1290 bool accessSet = false; 1312 var accessSet = false;
1291 int accessSSLFlags = 0; 1313 int accessSSLFlags = 0;
1292 bool accessSSLFlagsSet = false; 1314 var accessSSLFlagsSet = false;
1293 string anonymousUser = null; 1315 string anonymousUser = null;
1294 YesNoType aspDetailedError = YesNoType.NotSet; 1316 var aspDetailedError = YesNoType.NotSet;
1295 string authenticationProviders = null; 1317 string authenticationProviders = null;
1296 int authorization = 0; 1318 int authorization = 0;
1297 bool authorizationSet = false; 1319 var authorizationSet = false;
1298 string cacheControlCustom = null; 1320 string cacheControlCustom = null;
1299 long cacheControlMaxAge = CompilerConstants.LongNotSet; 1321 var cacheControlMaxAge = CompilerConstants.LongNotSet;
1300 string defaultDocuments = null; 1322 string defaultDocuments = null;
1301 string httpExpires = null; 1323 string httpExpires = null;
1302 bool iisControlledPassword = false; 1324 var iisControlledPassword = false;
1303 YesNoType index = YesNoType.NotSet; 1325 var index = YesNoType.NotSet;
1304 YesNoType logVisits = YesNoType.NotSet; 1326 var logVisits = YesNoType.NotSet;
1305 YesNoType notCustomError = YesNoType.NotSet; 1327 var notCustomError = YesNoType.NotSet;
1306 1328
1307 foreach (XAttribute attrib in element.Attributes()) 1329 foreach (var attrib in element.Attributes())
1308 { 1330 {
1309 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 1331 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
1310 { 1332 {
@@ -1520,58 +1542,73 @@ namespace WixToolset.Iis
1520 1542
1521 if (null == id) 1543 if (null == id)
1522 { 1544 {
1523 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id")); 1545 if (null == componentId)
1546 {
1547 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id"));
1548 id = Identifier.Invalid;
1549 }
1550 else
1551 {
1552 id = this.ParseHelper.CreateIdentifier("wdp", componentId);
1553 }
1524 } 1554 }
1525 1555
1526 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); 1556 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
1527 1557
1528 if (!this.Messaging.EncounteredError) 1558 if (!this.Messaging.EncounteredError)
1529 { 1559 {
1530 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsWebDirProperties", id); 1560 var tuple = section.AddTuple(new IIsWebDirPropertiesTuple(sourceLineNumbers, id)
1561 {
1562 AnonymousUserRef = anonymousUser,
1563 IIsControlledPassword = iisControlledPassword ? 1 : 0,
1564 DefaultDoc = defaultDocuments,
1565 HttpExpires = httpExpires,
1566 CacheControlCustom = cacheControlCustom,
1567 });
1568
1531 if (accessSet) 1569 if (accessSet)
1532 { 1570 {
1533 row.Set(1, access); 1571 tuple.Access = access;
1534 } 1572 }
1535 1573
1536 if (authorizationSet) 1574 if (authorizationSet)
1537 { 1575 {
1538 row.Set(2, authorization); 1576 tuple.Authorization = authorization;
1539 } 1577 }
1540 row.Set(3, anonymousUser); 1578
1541 row.Set(4, iisControlledPassword ? 1 : 0);
1542 if (YesNoType.NotSet != logVisits) 1579 if (YesNoType.NotSet != logVisits)
1543 { 1580 {
1544 row.Set(5, YesNoType.Yes == logVisits ? 1 : 0); 1581 tuple.LogVisits = YesNoType.Yes == logVisits ? 1 : 0;
1545 } 1582 }
1546 1583
1547 if (YesNoType.NotSet != index) 1584 if (YesNoType.NotSet != index)
1548 { 1585 {
1549 row.Set(6, YesNoType.Yes == index ? 1 : 0); 1586 tuple.Index = YesNoType.Yes == index ? 1 : 0;
1550 } 1587 }
1551 row.Set(7, defaultDocuments); 1588
1552 if (YesNoType.NotSet != aspDetailedError) 1589 if (YesNoType.NotSet != aspDetailedError)
1553 { 1590 {
1554 row.Set(8, YesNoType.Yes == aspDetailedError ? 1 : 0); 1591 tuple.AspDetailedError = YesNoType.Yes == aspDetailedError ? 1 : 0;
1555 } 1592 }
1556 row.Set(9, httpExpires); 1593
1557 if (CompilerConstants.LongNotSet != cacheControlMaxAge) 1594 if (CompilerConstants.LongNotSet != cacheControlMaxAge)
1558 { 1595 {
1559 row.Set(10, unchecked((int)cacheControlMaxAge)); 1596 tuple.CacheControlMaxAge = unchecked((int)cacheControlMaxAge);
1560 } 1597 }
1561 row.Set(11, cacheControlCustom); 1598
1562 if (YesNoType.NotSet != notCustomError) 1599 if (YesNoType.NotSet != notCustomError)
1563 { 1600 {
1564 row.Set(12, YesNoType.Yes == notCustomError ? 1 : 0); 1601 tuple.NoCustomError = YesNoType.Yes == notCustomError ? 1 : 0;
1565 } 1602 }
1566 1603
1567 if (accessSSLFlagsSet) 1604 if (accessSSLFlagsSet)
1568 { 1605 {
1569 row.Set(13, accessSSLFlags); 1606 tuple.AccessSSLFlags = accessSSLFlags;
1570 } 1607 }
1571 1608
1572 if (null != authenticationProviders) 1609 if (null != authenticationProviders)
1573 { 1610 {
1574 row.Set(14, authenticationProviders); 1611 tuple.AuthenticationProviders = authenticationProviders;
1575 } 1612 }
1576 } 1613 }
1577 1614
@@ -1586,13 +1623,13 @@ namespace WixToolset.Iis
1586 /// <param name="parent">Id of the parent.</param> 1623 /// <param name="parent">Id of the parent.</param>
1587 private void ParseWebErrorElement(Intermediate intermediate, IntermediateSection section, XElement element, WebErrorParentType parentType, string parent) 1624 private void ParseWebErrorElement(Intermediate intermediate, IntermediateSection section, XElement element, WebErrorParentType parentType, string parent)
1588 { 1625 {
1589 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 1626 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
1590 int errorCode = CompilerConstants.IntegerNotSet; 1627 var errorCode = CompilerConstants.IntegerNotSet;
1591 string file = null; 1628 string file = null;
1592 string url = null; 1629 string url = null;
1593 int subCode = CompilerConstants.IntegerNotSet; 1630 var subCode = CompilerConstants.IntegerNotSet;
1594 1631
1595 foreach (XAttribute attrib in element.Attributes()) 1632 foreach (var attrib in element.Attributes())
1596 { 1633 {
1597 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 1634 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
1598 { 1635 {
@@ -1641,17 +1678,19 @@ namespace WixToolset.Iis
1641 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); 1678 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
1642 1679
1643 // Reference ConfigureIIs since nothing will happen without it 1680 // Reference ConfigureIIs since nothing will happen without it
1644 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureIIs"); 1681 this.AddReferenceToConfigureIIs(section, sourceLineNumbers);
1645 1682
1646 if (!this.Messaging.EncounteredError) 1683 if (!this.Messaging.EncounteredError)
1647 { 1684 {
1648 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsWebError"); 1685 section.AddTuple(new IIsWebErrorTuple(sourceLineNumbers)
1649 row.Set(0, errorCode); 1686 {
1650 row.Set(1, subCode); 1687 ErrorCode = errorCode,
1651 row.Set(2, (int)parentType); 1688 SubCode = subCode,
1652 row.Set(3, parent); 1689 ParentType = (int)parentType,
1653 row.Set(4, file); 1690 ParentValue = parent,
1654 row.Set(5, url); 1691 File = file,
1692 URL = url,
1693 });
1655 } 1694 }
1656 } 1695 }
1657 1696
@@ -1663,15 +1702,15 @@ namespace WixToolset.Iis
1663 /// <param name="parentWeb">Optional identifier of parent web site.</param> 1702 /// <param name="parentWeb">Optional identifier of parent web site.</param>
1664 private void ParseWebFilterElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId, string parentWeb) 1703 private void ParseWebFilterElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId, string parentWeb)
1665 { 1704 {
1666 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 1705 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
1667 Identifier id = null; 1706 Identifier id = null;
1668 string description = null; 1707 string description = null;
1669 int flags = 0; 1708 int flags = 0;
1670 int loadOrder = CompilerConstants.IntegerNotSet; 1709 var loadOrder = CompilerConstants.IntegerNotSet;
1671 string name = null; 1710 string name = null;
1672 string path = null; 1711 string path = null;
1673 1712
1674 foreach (XAttribute attrib in element.Attributes()) 1713 foreach (var attrib in element.Attributes())
1675 { 1714 {
1676 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 1715 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
1677 { 1716 {
@@ -1717,7 +1756,7 @@ namespace WixToolset.Iis
1717 } 1756 }
1718 1757
1719 parentWeb = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1758 parentWeb = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1720 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "IIsWebSite", parentWeb); 1759 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.IIsWebSite, parentWeb);
1721 break; 1760 break;
1722 default: 1761 default:
1723 this.ParseHelper.UnexpectedAttribute(element, attrib); 1762 this.ParseHelper.UnexpectedAttribute(element, attrib);
@@ -1732,7 +1771,7 @@ namespace WixToolset.Iis
1732 1771
1733 if (null == id) 1772 if (null == id)
1734 { 1773 {
1735 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id")); 1774 id = this.ParseHelper.CreateIdentifier("ifl", name, componentId, path, parentWeb);
1736 } 1775 }
1737 1776
1738 if (null == name) 1777 if (null == name)
@@ -1748,20 +1787,23 @@ namespace WixToolset.Iis
1748 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); 1787 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
1749 1788
1750 // Reference ConfigureIIs since nothing will happen without it 1789 // Reference ConfigureIIs since nothing will happen without it
1751 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureIIs"); 1790 this.AddReferenceToConfigureIIs(section, sourceLineNumbers);
1752 1791
1753 if (!this.Messaging.EncounteredError) 1792 if (!this.Messaging.EncounteredError)
1754 { 1793 {
1755 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsFilter", id); 1794 var tuple = section.AddTuple(new IIsFilterTuple(sourceLineNumbers, id)
1756 row.Set(1, name); 1795 {
1757 row.Set(2, componentId); 1796 Name = name,
1758 row.Set(3, path); 1797 ComponentRef = componentId,
1759 row.Set(4, parentWeb); 1798 Path = path,
1760 row.Set(5, description); 1799 WebRef = parentWeb,
1761 row.Set(6, flags); 1800 Description = description,
1801 Flags = flags,
1802 });
1803
1762 if (CompilerConstants.IntegerNotSet != loadOrder) 1804 if (CompilerConstants.IntegerNotSet != loadOrder)
1763 { 1805 {
1764 row.Set(7, loadOrder); 1806 tuple.LoadOrder = loadOrder;
1765 } 1807 }
1766 } 1808 }
1767 } 1809 }
@@ -1772,11 +1814,11 @@ namespace WixToolset.Iis
1772 /// <param name="element">Node to be parsed.</param> 1814 /// <param name="element">Node to be parsed.</param>
1773 private void ParseWebLogElement(Intermediate intermediate, IntermediateSection section, XElement element) 1815 private void ParseWebLogElement(Intermediate intermediate, IntermediateSection section, XElement element)
1774 { 1816 {
1775 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 1817 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
1776 Identifier id = null; 1818 Identifier id = null;
1777 string type = null; 1819 string type = null;
1778 1820
1779 foreach (XAttribute attrib in element.Attributes()) 1821 foreach (var attrib in element.Attributes())
1780 { 1822 {
1781 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 1823 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
1782 { 1824 {
@@ -1786,7 +1828,7 @@ namespace WixToolset.Iis
1786 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib); 1828 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
1787 break; 1829 break;
1788 case "Type": 1830 case "Type":
1789 string typeValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 1831 var typeValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1790 if (0 < typeValue.Length) 1832 if (0 < typeValue.Length)
1791 { 1833 {
1792 switch (typeValue) 1834 switch (typeValue)
@@ -1837,8 +1879,10 @@ namespace WixToolset.Iis
1837 1879
1838 if (!this.Messaging.EncounteredError) 1880 if (!this.Messaging.EncounteredError)
1839 { 1881 {
1840 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsWebLog", id); 1882 section.AddTuple(new IIsWebLogTuple(sourceLineNumbers, id)
1841 row.Set(1, type); 1883 {
1884 Format = type,
1885 });
1842 } 1886 }
1843 } 1887 }
1844 1888
@@ -1849,11 +1893,11 @@ namespace WixToolset.Iis
1849 /// <param name="componentId">Identifier for parent component.</param> 1893 /// <param name="componentId">Identifier for parent component.</param>
1850 private void ParseWebPropertyElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId) 1894 private void ParseWebPropertyElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId)
1851 { 1895 {
1852 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 1896 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
1853 Identifier id = null; 1897 Identifier id = null;
1854 string value = null; 1898 string value = null;
1855 1899
1856 foreach (XAttribute attrib in element.Attributes()) 1900 foreach (var attrib in element.Attributes())
1857 { 1901 {
1858 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 1902 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
1859 { 1903 {
@@ -1902,14 +1946,16 @@ namespace WixToolset.Iis
1902 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); 1946 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
1903 1947
1904 // Reference ConfigureIIs since nothing will happen without it 1948 // Reference ConfigureIIs since nothing will happen without it
1905 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureIIs"); 1949 this.AddReferenceToConfigureIIs(section, sourceLineNumbers);
1906 1950
1907 if (!this.Messaging.EncounteredError) 1951 if (!this.Messaging.EncounteredError)
1908 { 1952 {
1909 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsProperty", id); 1953 section.AddTuple(new IIsPropertyTuple(sourceLineNumbers, id)
1910 row.Set(1, componentId); 1954 {
1911 row.Set(2, 0); 1955 ComponentRef = componentId,
1912 row.Set(3, value); 1956 Attributes = 0,
1957 Value = value,
1958 });
1913 } 1959 }
1914 } 1960 }
1915 1961
@@ -1920,7 +1966,7 @@ namespace WixToolset.Iis
1920 /// <param name="componentId">Identifier for parent component.</param> 1966 /// <param name="componentId">Identifier for parent component.</param>
1921 private void ParseWebServiceExtensionElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId) 1967 private void ParseWebServiceExtensionElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId)
1922 { 1968 {
1923 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 1969 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
1924 Identifier id = null; 1970 Identifier id = null;
1925 int attributes = 0; 1971 int attributes = 0;
1926 string description = null; 1972 string description = null;
@@ -1978,7 +2024,7 @@ namespace WixToolset.Iis
1978 2024
1979 if (null == id) 2025 if (null == id)
1980 { 2026 {
1981 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id")); 2027 id = this.ParseHelper.CreateIdentifier("iwe", componentId, file);
1982 } 2028 }
1983 2029
1984 if (null == file) 2030 if (null == file)
@@ -1989,16 +2035,18 @@ namespace WixToolset.Iis
1989 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); 2035 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
1990 2036
1991 // Reference ConfigureIIs since nothing will happen without it 2037 // Reference ConfigureIIs since nothing will happen without it
1992 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureIIs"); 2038 this.AddReferenceToConfigureIIs(section, sourceLineNumbers);
1993 2039
1994 if (!this.Messaging.EncounteredError) 2040 if (!this.Messaging.EncounteredError)
1995 { 2041 {
1996 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsWebServiceExtension", id); 2042 section.AddTuple(new IIsWebServiceExtensionTuple(sourceLineNumbers, id)
1997 row.Set(1, componentId); 2043 {
1998 row.Set(2, file); 2044 ComponentRef = componentId,
1999 row.Set(3, description); 2045 File = file,
2000 row.Set(4, group); 2046 Description = description,
2001 row.Set(5, attributes); 2047 Group = group,
2048 Attributes = attributes,
2049 });
2002 } 2050 }
2003 } 2051 }
2004 2052
@@ -2009,21 +2057,21 @@ namespace WixToolset.Iis
2009 /// <param name="componentId">Optional identifier of parent component.</param> 2057 /// <param name="componentId">Optional identifier of parent component.</param>
2010 private void ParseWebSiteElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId) 2058 private void ParseWebSiteElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId)
2011 { 2059 {
2012 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 2060 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
2013 Identifier id = null; 2061 Identifier id = null;
2014 string application = null; 2062 string application = null;
2015 int attributes = 0; 2063 int attributes = 0;
2016 int connectionTimeout = CompilerConstants.IntegerNotSet; 2064 var connectionTimeout = CompilerConstants.IntegerNotSet;
2017 string description = null; 2065 string description = null;
2018 string directory = null; 2066 string directory = null;
2019 string dirProperties = null; 2067 string dirProperties = null;
2020 string keyAddress = null; 2068 string keyAddress = null;
2021 string log = null; 2069 string log = null;
2022 string siteId = null; 2070 string siteId = null;
2023 int sequence = CompilerConstants.IntegerNotSet; 2071 var sequence = CompilerConstants.IntegerNotSet;
2024 int state = CompilerConstants.IntegerNotSet; 2072 var state = CompilerConstants.IntegerNotSet;
2025 2073
2026 foreach (XAttribute attrib in element.Attributes()) 2074 foreach (var attrib in element.Attributes())
2027 { 2075 {
2028 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 2076 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
2029 { 2077 {
@@ -2070,7 +2118,7 @@ namespace WixToolset.Iis
2070 break; 2118 break;
2071 case "Directory": 2119 case "Directory":
2072 directory = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2120 directory = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2073 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Directory", directory); 2121 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.Directory, directory);
2074 break; 2122 break;
2075 case "DirProperties": 2123 case "DirProperties":
2076 if (null == componentId) 2124 if (null == componentId)
@@ -2121,7 +2169,7 @@ namespace WixToolset.Iis
2121 } 2169 }
2122 2170
2123 log = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2171 log = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2124 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "IIsWebLog", log); 2172 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.IIsWebLog, log);
2125 break; 2173 break;
2126 default: 2174 default:
2127 this.ParseHelper.UnexpectedAttribute(element, attrib); 2175 this.ParseHelper.UnexpectedAttribute(element, attrib);
@@ -2136,7 +2184,7 @@ namespace WixToolset.Iis
2136 2184
2137 if (null == id) 2185 if (null == id)
2138 { 2186 {
2139 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id")); 2187 id = this.ParseHelper.CreateIdentifier("iws", description, componentId, siteId, application);
2140 } 2188 }
2141 2189
2142 if (null == description) 2190 if (null == description)
@@ -2149,11 +2197,11 @@ namespace WixToolset.Iis
2149 this.Messaging.Write(IIsErrors.RequiredAttributeUnderComponent(sourceLineNumbers, element.Name.LocalName, "Directory")); 2197 this.Messaging.Write(IIsErrors.RequiredAttributeUnderComponent(sourceLineNumbers, element.Name.LocalName, "Directory"));
2150 } 2198 }
2151 2199
2152 foreach (XElement child in element.Elements()) 2200 foreach (var child in element.Elements())
2153 { 2201 {
2154 if (this.Namespace == child.Name.Namespace) 2202 if (this.Namespace == child.Name.Namespace)
2155 { 2203 {
2156 SourceLineNumber childSourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(child); 2204 var childSourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(child);
2157 switch (child.Name.LocalName) 2205 switch (child.Name.LocalName)
2158 { 2206 {
2159 case "CertificateRef": 2207 case "CertificateRef":
@@ -2206,7 +2254,7 @@ namespace WixToolset.Iis
2206 this.Messaging.Write(IIsErrors.IllegalElementWithoutComponent(childSourceLineNumbers, child.Name.LocalName)); 2254 this.Messaging.Write(IIsErrors.IllegalElementWithoutComponent(childSourceLineNumbers, child.Name.LocalName));
2207 } 2255 }
2208 2256
2209 string childWebDirProperties = this.ParseWebDirPropertiesElement(intermediate, section, child); 2257 string childWebDirProperties = this.ParseWebDirPropertiesElement(intermediate, section, child, componentId);
2210 if (null == dirProperties) 2258 if (null == dirProperties)
2211 { 2259 {
2212 dirProperties = childWebDirProperties; 2260 dirProperties = childWebDirProperties;
@@ -2262,48 +2310,53 @@ namespace WixToolset.Iis
2262 2310
2263 if (null != application) 2311 if (null != application)
2264 { 2312 {
2265 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "IIsWebApplication", application); 2313 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.IIsWebApplication, application);
2266 } 2314 }
2267 2315
2268 if (null != dirProperties) 2316 if (null != dirProperties)
2269 { 2317 {
2270 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "IIsWebDirProperties", dirProperties); 2318 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.IIsWebDirProperties, dirProperties);
2271 } 2319 }
2272 2320
2273 if (null != componentId) 2321 if (null != componentId)
2274 { 2322 {
2275 // Reference ConfigureIIs since nothing will happen without it 2323 // Reference ConfigureIIs since nothing will happen without it
2276 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureIIs"); 2324 this.AddReferenceToConfigureIIs(section, sourceLineNumbers);
2277 } 2325 }
2278 2326
2279 if (!this.Messaging.EncounteredError) 2327 if (!this.Messaging.EncounteredError)
2280 { 2328 {
2281 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsWebSite", id); 2329 var tuple = section.AddTuple(new IIsWebSiteTuple(sourceLineNumbers, id)
2282 row.Set(1, componentId); 2330 {
2283 row.Set(2, description); 2331 ComponentRef = componentId,
2332 Description = description,
2333 DirectoryRef = directory,
2334 KeyAddressRef = keyAddress,
2335 DirPropertiesRef = dirProperties,
2336 ApplicationRef = application,
2337 LogRef = log,
2338 WebsiteId = siteId,
2339 });
2340
2284 if (CompilerConstants.IntegerNotSet != connectionTimeout) 2341 if (CompilerConstants.IntegerNotSet != connectionTimeout)
2285 { 2342 {
2286 row.Set(3, connectionTimeout); 2343 tuple.ConnectionTimeout = connectionTimeout;
2287 } 2344 }
2288 row.Set(4, directory); 2345
2289 if (CompilerConstants.IntegerNotSet != state) 2346 if (CompilerConstants.IntegerNotSet != state)
2290 { 2347 {
2291 row.Set(5, state); 2348 tuple.State = state;
2292 } 2349 }
2293 2350
2294 if (0 != attributes) 2351 if (0 != attributes)
2295 { 2352 {
2296 row.Set(6, attributes); 2353 tuple.Attributes = attributes;
2297 } 2354 }
2298 row.Set(7, keyAddress); 2355
2299 row.Set(8, dirProperties);
2300 row.Set(9, application);
2301 if (CompilerConstants.IntegerNotSet != sequence) 2356 if (CompilerConstants.IntegerNotSet != sequence)
2302 { 2357 {
2303 row.Set(10, sequence); 2358 tuple.Sequence = sequence;
2304 } 2359 }
2305 row.Set(11, log);
2306 row.Set(12, siteId);
2307 } 2360 }
2308 } 2361 }
2309 2362
@@ -2315,12 +2368,12 @@ namespace WixToolset.Iis
2315 /// <param name="parent">Id of the parent.</param> 2368 /// <param name="parent">Id of the parent.</param>
2316 private void ParseHttpHeaderElement(Intermediate intermediate, IntermediateSection section, XElement element, HttpHeaderParentType parentType, string parent) 2369 private void ParseHttpHeaderElement(Intermediate intermediate, IntermediateSection section, XElement element, HttpHeaderParentType parentType, string parent)
2317 { 2370 {
2318 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 2371 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
2319 Identifier id = null; 2372 Identifier id = null;
2320 string headerName = null; 2373 string headerName = null;
2321 string headerValue = null; 2374 string headerValue = null;
2322 2375
2323 foreach (XAttribute attrib in element.Attributes()) 2376 foreach (var attrib in element.Attributes())
2324 { 2377 {
2325 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 2378 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
2326 { 2379 {
@@ -2358,15 +2411,20 @@ namespace WixToolset.Iis
2358 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); 2411 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
2359 2412
2360 // Reference ConfigureIIs since nothing will happen without it 2413 // Reference ConfigureIIs since nothing will happen without it
2361 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureIIs"); 2414 this.AddReferenceToConfigureIIs(section, sourceLineNumbers);
2362 2415
2363 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsHttpHeader", id); 2416 if (!this.Messaging.EncounteredError)
2364 row.Set(1, (int)parentType); 2417 {
2365 row.Set(2, parent); 2418 section.AddTuple(new IIsHttpHeaderTuple(sourceLineNumbers, id)
2366 row.Set(3, headerName); 2419 {
2367 row.Set(4, headerValue); 2420 HttpHeader = id.Id,
2368 row.Set(5, 0); 2421 ParentType = (int)parentType,
2369 //row.Set(6, null); 2422 ParentValue = parent,
2423 Name = headerName,
2424 Value = headerValue,
2425 Attributes = 0,
2426 });
2427 }
2370 } 2428 }
2371 2429
2372 /// <summary> 2430 /// <summary>
@@ -2378,14 +2436,14 @@ namespace WixToolset.Iis
2378 /// <param name="parentAlias">Alias of the parent web site.</param> 2436 /// <param name="parentAlias">Alias of the parent web site.</param>
2379 private void ParseWebVirtualDirElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId, string parentWeb, string parentAlias) 2437 private void ParseWebVirtualDirElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId, string parentWeb, string parentAlias)
2380 { 2438 {
2381 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 2439 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
2382 Identifier id = null; 2440 Identifier id = null;
2383 string alias = null; 2441 string alias = null;
2384 string application = null; 2442 string application = null;
2385 string directory = null; 2443 string directory = null;
2386 string dirProperties = null; 2444 string dirProperties = null;
2387 2445
2388 foreach (XAttribute attrib in element.Attributes()) 2446 foreach (var attrib in element.Attributes())
2389 { 2447 {
2390 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) 2448 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
2391 { 2449 {
@@ -2399,7 +2457,7 @@ namespace WixToolset.Iis
2399 break; 2457 break;
2400 case "Directory": 2458 case "Directory":
2401 directory = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2459 directory = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2402 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Directory", directory); 2460 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.Directory, directory);
2403 break; 2461 break;
2404 case "DirProperties": 2462 case "DirProperties":
2405 dirProperties = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 2463 dirProperties = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -2414,7 +2472,7 @@ namespace WixToolset.Iis
2414 } 2472 }
2415 2473
2416 parentWeb = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2474 parentWeb = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2417 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "IIsWebSite", parentWeb); 2475 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.IIsWebSite, parentWeb);
2418 break; 2476 break;
2419 default: 2477 default:
2420 this.ParseHelper.UnexpectedAttribute(element, attrib); 2478 this.ParseHelper.UnexpectedAttribute(element, attrib);
@@ -2429,7 +2487,7 @@ namespace WixToolset.Iis
2429 2487
2430 if (null == id) 2488 if (null == id)
2431 { 2489 {
2432 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Id")); 2490 id = this.ParseHelper.CreateIdentifier("wvd", alias, directory, dirProperties, application, parentWeb);
2433 } 2491 }
2434 2492
2435 if (null == alias) 2493 if (null == alias)
@@ -2461,11 +2519,11 @@ namespace WixToolset.Iis
2461 alias = String.Concat(parentAlias, "/", alias); 2519 alias = String.Concat(parentAlias, "/", alias);
2462 } 2520 }
2463 2521
2464 foreach (XElement child in element.Elements()) 2522 foreach (var child in element.Elements())
2465 { 2523 {
2466 if (this.Namespace == child.Name.Namespace) 2524 if (this.Namespace == child.Name.Namespace)
2467 { 2525 {
2468 SourceLineNumber childSourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(child); 2526 var childSourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(child);
2469 switch (child.Name.LocalName) 2527 switch (child.Name.LocalName)
2470 { 2528 {
2471 case "WebApplication": 2529 case "WebApplication":
@@ -2482,7 +2540,7 @@ namespace WixToolset.Iis
2482 this.Messaging.Write(IIsErrors.IllegalElementWithoutComponent(childSourceLineNumbers, child.Name.LocalName)); 2540 this.Messaging.Write(IIsErrors.IllegalElementWithoutComponent(childSourceLineNumbers, child.Name.LocalName));
2483 } 2541 }
2484 2542
2485 string childWebDirProperties = this.ParseWebDirPropertiesElement(intermediate, section, child); 2543 string childWebDirProperties = this.ParseWebDirPropertiesElement(intermediate, section, child, componentId);
2486 if (null == dirProperties) 2544 if (null == dirProperties)
2487 { 2545 {
2488 dirProperties = childWebDirProperties; 2546 dirProperties = childWebDirProperties;
@@ -2518,27 +2576,34 @@ namespace WixToolset.Iis
2518 2576
2519 if (null != dirProperties) 2577 if (null != dirProperties)
2520 { 2578 {
2521 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "IIsWebDirProperties", dirProperties); 2579 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.IIsWebDirProperties, dirProperties);
2522 } 2580 }
2523 2581
2524 if (null != application) 2582 if (null != application)
2525 { 2583 {
2526 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "IIsWebApplication", application); 2584 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, IisTupleDefinitions.IIsWebApplication, application);
2527 } 2585 }
2528 2586
2529 // Reference ConfigureIIs since nothing will happen without it 2587 // Reference ConfigureIIs since nothing will happen without it
2530 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureIIs"); 2588 this.AddReferenceToConfigureIIs(section, sourceLineNumbers);
2531 2589
2532 if (!this.Messaging.EncounteredError) 2590 if (!this.Messaging.EncounteredError)
2533 { 2591 {
2534 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "IIsWebVirtualDir", id); 2592 section.AddTuple(new IIsWebVirtualDirTuple(sourceLineNumbers, id)
2535 row.Set(1, componentId); 2593 {
2536 row.Set(2, parentWeb); 2594 ComponentRef = componentId,
2537 row.Set(3, alias); 2595 WebRef = parentWeb,
2538 row.Set(4, directory); 2596 Alias = alias,
2539 row.Set(5, dirProperties); 2597 DirectoryRef = directory,
2540 row.Set(6, application); 2598 DirPropertiesRef = dirProperties,
2599 ApplicationRef = application,
2600 });
2541 } 2601 }
2542 } 2602 }
2603
2604 private void AddReferenceToConfigureIIs(IntermediateSection section, SourceLineNumber sourceLineNumbers)
2605 {
2606 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.CustomAction, "ConfigureIIs");
2607 }
2543 } 2608 }
2544} 2609}
diff --git a/src/wixext/IisTableDefinitions.cs b/src/wixext/IisTableDefinitions.cs
new file mode 100644
index 00000000..eebfd26a
--- /dev/null
+++ b/src/wixext/IisTableDefinitions.cs
@@ -0,0 +1,324 @@
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.Iis
4{
5 using WixToolset.Data.WindowsInstaller;
6
7 public static class IisTableDefinitions
8 {
9 public static readonly TableDefinition Certificate = new TableDefinition(
10 "Certificate",
11 new[]
12 {
13 new ColumnDefinition("Certificate", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyColumn: 1, description: "Identifier for the certificate in the package.", modularizeType: ColumnModularizeType.Column),
14 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, description: "Foreign key into the Component table used to determine install state", modularizeType: ColumnModularizeType.Column),
15 new ColumnDefinition("Name", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Name to be used for the Certificate."),
16 new ColumnDefinition("StoreLocation", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 1, maxValue: 2, description: "Location of the target certificate store (CurrentUser == 1, LocalMachine == 2)"),
17 new ColumnDefinition("StoreName", ColumnType.String, 64, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Name of the target certificate store"),
18 new ColumnDefinition("Attributes", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "Attributes of the certificate"),
19 new ColumnDefinition("Binary_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Binary", keyColumn: 1, description: "Identifier to Binary table containing certificate.", modularizeType: ColumnModularizeType.Column),
20 new ColumnDefinition("CertificatePath", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Property to path of certificate.", modularizeType: ColumnModularizeType.Property),
21 new ColumnDefinition("PFXPassword", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Hidden property to a pfx password", modularizeType: ColumnModularizeType.Property),
22 },
23 tupleDefinitionName: "Certificate",
24 tupleIdIsPrimaryKey: true
25 );
26
27 public static readonly TableDefinition CertificateHash = new TableDefinition(
28 "CertificateHash",
29 new[]
30 {
31 new ColumnDefinition("Certificate_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyColumn: 1, description: "Foreign key to certificate in Certificate table.", modularizeType: ColumnModularizeType.Column),
32 new ColumnDefinition("Hash", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Base64 encoded SHA1 hash of certificate populated at run-time."),
33 },
34 tupleDefinitionName: "CertificateHash",
35 tupleIdIsPrimaryKey: false
36 );
37
38 public static readonly TableDefinition IIsWebSiteCertificates = new TableDefinition(
39 "IIsWebSiteCertificates",
40 new[]
41 {
42 new ColumnDefinition("Web_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "IIsWebSite", keyColumn: 1, description: "The index into the IIsWebSite table.", modularizeType: ColumnModularizeType.Column),
43 new ColumnDefinition("Certificate_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Text, keyTable: "Certificate", keyColumn: 1, description: "The index into the Certificate table.", modularizeType: ColumnModularizeType.Column),
44 },
45 tupleDefinitionName: "IIsWebSiteCertificates",
46 tupleIdIsPrimaryKey: false
47 );
48
49 public static readonly TableDefinition IIsAppPool = new TableDefinition(
50 "IIsAppPool",
51 new[]
52 {
53 new ColumnDefinition("AppPool", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token for apppool", modularizeType: ColumnModularizeType.Column),
54 new ColumnDefinition("Name", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Name to be used for the IIs AppPool.", modularizeType: ColumnModularizeType.Property),
55 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key referencing Component that controls the app pool", modularizeType: ColumnModularizeType.Column),
56 new ColumnDefinition("Attributes", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, description: "Attributes of the AppPool"),
57 new ColumnDefinition("User_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "User", keyColumn: 1, description: "User account to run the app pool as", modularizeType: ColumnModularizeType.Column),
58 new ColumnDefinition("RecycleMinutes", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Number of minutes between recycling app pool"),
59 new ColumnDefinition("RecycleRequests", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Number of requests between recycling app pool"),
60 new ColumnDefinition("RecycleTimes", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Times to recycle app pool (comma delimited - i.e. 1:45,13:30)"),
61 new ColumnDefinition("IdleTimeout", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Amount of idle time before shutting down"),
62 new ColumnDefinition("QueueLimit", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Reject requests after queue gets how large"),
63 new ColumnDefinition("CPUMon", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "CPUMon is a comma delimeted list of the following format: <percent CPU usage>,<refress minutes>,<Action>. The values for Action are 1 (Shutdown) and 0 (No Action)."),
64 new ColumnDefinition("MaxProc", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Maximum number of processes to use"),
65 new ColumnDefinition("VirtualMemory", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Amount of virtual memory (in KB) that a worker process can use before the worker process recycles. The maximum value supported for this field is 4,294,967 KB."),
66 new ColumnDefinition("PrivateMemory", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Amount of private memory (in KB) that a worker process can use before the worker process recycles. The maximum value supported for this field is 4,294,967 KB."),
67 new ColumnDefinition("ManagedRuntimeVersion", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Specifies the .NET Framework version to be used by the application pool."),
68 new ColumnDefinition("ManagedPipelineMode", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Specifies the request-processing mode that is used to process requests for managed content."),
69 },
70 tupleDefinitionName: "IIsAppPool",
71 tupleIdIsPrimaryKey: true
72 );
73
74 public static readonly TableDefinition IIsMimeMap = new TableDefinition(
75 "IIsMimeMap",
76 new[]
77 {
78 new ColumnDefinition("MimeMap", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token for Mime Map definitions", modularizeType: ColumnModularizeType.Column),
79 new ColumnDefinition("ParentType", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, possibilities: "1;2", description: "Type of parent: 1=vdir 2=website"),
80 new ColumnDefinition("ParentValue", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, description: "Name of the parent value.", modularizeType: ColumnModularizeType.Column),
81 new ColumnDefinition("MimeType", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Mime-type covered by the MimeMap."),
82 new ColumnDefinition("Extension", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Extension covered by the MimeMap."),
83 },
84 tupleDefinitionName: "IIsMimeMap",
85 tupleIdIsPrimaryKey: true
86 );
87
88 public static readonly TableDefinition IIsProperty = new TableDefinition(
89 "IIsProperty",
90 new[]
91 {
92 new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Unique name of the IIsProperty"),
93 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Component that the property is linked to", modularizeType: ColumnModularizeType.Column),
94 new ColumnDefinition("Attributes", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, description: "Attributes of the IIsProperty (unused)"),
95 new ColumnDefinition("Value", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Value of the IIsProperty"),
96 },
97 tupleDefinitionName: "IIsProperty",
98 tupleIdIsPrimaryKey: true
99 );
100
101 public static readonly TableDefinition IIsWebDirProperties = new TableDefinition(
102 "IIsWebDirProperties",
103 new[]
104 {
105 new ColumnDefinition("DirProperties", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token for Web Properties", modularizeType: ColumnModularizeType.Column),
106 new ColumnDefinition("Access", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Access rights to the web server"),
107 new ColumnDefinition("Authorization", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Authorization policy to web server (anonymous access, NTLM, etc)"),
108 new ColumnDefinition("AnonymousUser_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "User", keyColumn: 1, description: "Foreign key, User used to log into database", modularizeType: ColumnModularizeType.Column),
109 new ColumnDefinition("IIsControlledPassword", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "0;1", description: "Specifies whether IIs is allowed to set the AnonymousUser_ password"),
110 new ColumnDefinition("LogVisits", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "0;1", description: "Specifies whether IIs tracks all access to the directory"),
111 new ColumnDefinition("Index", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "0;1", description: "Specifies whether IIs searches the directory"),
112 new ColumnDefinition("DefaultDoc", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Comma delimited list of file names to act as a default document"),
113 new ColumnDefinition("AspDetailedError", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "0;1", description: "Specifies whether detailed ASP errors are sent to browser"),
114 new ColumnDefinition("HttpExpires", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Value to set the HttpExpires attribute to for a Web Dir in the metabase"),
115 new ColumnDefinition("CacheControlMaxAge", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Integer value specifying the cache control maximum age value."),
116 new ColumnDefinition("CacheControlCustom", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Custom HTTP 1.1 cache control directives."),
117 new ColumnDefinition("NoCustomError", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "0;1", description: "Specifies whether IIs will return custom errors for this directory."),
118 new ColumnDefinition("AccessSSLFlags", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Specifies AccessSSLFlags IIS metabase property."),
119 new ColumnDefinition("AuthenticationProviders", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Comma delimited list, in order of precedence, of Windows authentication providers that IIS will attempt to use: NTLM, Kerberos, Negotiate, and others."),
120 },
121 tupleDefinitionName: "IIsWebDirProperties",
122 tupleIdIsPrimaryKey: true
123 );
124
125 public static readonly TableDefinition IIsWebAddress = new TableDefinition(
126 "IIsWebAddress",
127 new[]
128 {
129 new ColumnDefinition("Address", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token", modularizeType: ColumnModularizeType.Column),
130 new ColumnDefinition("Web_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "IIsWebSite", keyColumn: 1, description: "Foreign key referencing Web that uses the address.", modularizeType: ColumnModularizeType.Column),
131 new ColumnDefinition("IP", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "String representing IP address (#.#.#.#) or NT machine name (fooserver)", modularizeType: ColumnModularizeType.Property),
132 new ColumnDefinition("Port", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Port web site listens on", modularizeType: ColumnModularizeType.Property),
133 new ColumnDefinition("Header", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Special header information for the web site"),
134 new ColumnDefinition("Secure", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "0;1", description: "Specifies whether SSL is used to communicate with web site"),
135 },
136 tupleDefinitionName: "IIsWebAddress",
137 tupleIdIsPrimaryKey: true
138 );
139
140 public static readonly TableDefinition IIsWebSite = new TableDefinition(
141 "IIsWebSite",
142 new[]
143 {
144 new ColumnDefinition("Web", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token", modularizeType: ColumnModularizeType.Column),
145 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key referencing Component that controls the web site", modularizeType: ColumnModularizeType.Column),
146 new ColumnDefinition("Description", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Description displayed in IIS MMC applet"),
147 new ColumnDefinition("ConnectionTimeout", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Time connection is maintained without activity (in seconds)"),
148 new ColumnDefinition("Directory_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "Directory", keyColumn: 1, description: "Foreign key referencing directory that the web site points at", modularizeType: ColumnModularizeType.Column),
149 new ColumnDefinition("State", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "0;1;2", description: "Sets intial state of web site"),
150 new ColumnDefinition("Attributes", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "2", description: "Control the install behavior of web site"),
151 new ColumnDefinition("KeyAddress_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "IIsWebAddress", keyColumn: 1, description: "Foreign key referencing primary address for the web site", modularizeType: ColumnModularizeType.Column),
152 new ColumnDefinition("DirProperties_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "IIsWebDirProperties", keyColumn: 1, description: "Foreign key referencing possible security information for the web site", modularizeType: ColumnModularizeType.Column),
153 new ColumnDefinition("Application_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "IIsWebApplication", keyColumn: 1, description: "Foreign key referencing possible ASP application for the web site.", modularizeType: ColumnModularizeType.Column),
154 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Allows ordering of web site install"),
155 new ColumnDefinition("Log_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Unknown, keyTable: "IIsWebLog", keyColumn: 1, description: "Foreign key reference to IIsWebLog data", modularizeType: ColumnModularizeType.Column),
156 new ColumnDefinition("Id", ColumnType.String, 74, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Optional number or formatted value that resolves to number that acts as the WebSite Id."),
157 },
158 tupleDefinitionName: "IIsWebSite",
159 tupleIdIsPrimaryKey: true
160 );
161
162 public static readonly TableDefinition IIsWebApplication = new TableDefinition(
163 "IIsWebApplication",
164 new[]
165 {
166 new ColumnDefinition("Application", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token for ASP Application", modularizeType: ColumnModularizeType.Column),
167 new ColumnDefinition("Name", ColumnType.Localized, 255, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Name of application in IIS MMC applet", modularizeType: ColumnModularizeType.Property),
168 new ColumnDefinition("Isolation", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, possibilities: "0;1;2", description: "Isolation level for ASP Application: 0 == Low, 2 == Medium, 1 == High"),
169 new ColumnDefinition("AllowSessions", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "0;1", description: "Specifies whether application may maintain session state"),
170 new ColumnDefinition("SessionTimeout", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Time session state is maintained without user interaction"),
171 new ColumnDefinition("Buffer", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "0;1", description: "Specifies whether application buffers its output"),
172 new ColumnDefinition("ParentPaths", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "0;1", description: "What is this for anyway?"),
173 new ColumnDefinition("DefaultScript", ColumnType.String, 26, primaryKey: false, nullable: true, ColumnCategory.Text, possibilities: "VBScript;JScript", description: "Default scripting language for ASP applications"),
174 new ColumnDefinition("ScriptTimeout", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Time ASP application page is permitted to process"),
175 new ColumnDefinition("ServerDebugging", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "0;1", description: "Specifies whether to allow ASP server-side script debugging"),
176 new ColumnDefinition("ClientDebugging", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "0;1", description: "Specifies whether to allow ASP client-side script debugging"),
177 new ColumnDefinition("AppPool_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "IIsAppPool", keyColumn: 1, description: "App Pool this application should run under", modularizeType: ColumnModularizeType.Column),
178 },
179 tupleDefinitionName: "IIsWebApplication",
180 tupleIdIsPrimaryKey: true
181 );
182
183 public static readonly TableDefinition IIsWebApplicationExtension = new TableDefinition(
184 "IIsWebApplicationExtension",
185 new[]
186 {
187 new ColumnDefinition("Application_", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "IIsWebApplication", keyColumn: 1, description: "Foreign key referencing possible ASP application for the web site", modularizeType: ColumnModularizeType.Column),
188 new ColumnDefinition("Extension", ColumnType.String, 255, primaryKey: true, nullable: true, ColumnCategory.Text, description: "Primary key, Extension that should be registered for this ASP application"),
189 new ColumnDefinition("Verbs", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Text, description: "Comma delimited list of HTTP verbs the extension should be registered with"),
190 new ColumnDefinition("Executable", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Path to extension (usually file property: [#file])", modularizeType: ColumnModularizeType.Property),
191 new ColumnDefinition("Attributes", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, possibilities: "1;4;5", description: "Attributes for extension: 1 == Script, 4 == Check Path Info"),
192 },
193 tupleDefinitionName: "IIsWebApplicationExtension",
194 tupleIdIsPrimaryKey: false
195 );
196
197 public static readonly TableDefinition IIsFilter = new TableDefinition(
198 "IIsFilter",
199 new[]
200 {
201 new ColumnDefinition("Filter", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token", modularizeType: ColumnModularizeType.Column),
202 new ColumnDefinition("Name", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Unknown, description: "Name of the ISAPI Filter in IIS"),
203 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key referencing Component that controls the filter", modularizeType: ColumnModularizeType.Column),
204 new ColumnDefinition("Path", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Path to filter (usually file property: [#file])", modularizeType: ColumnModularizeType.Property),
205 new ColumnDefinition("Web_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "IIsWebSite", keyColumn: 1, description: "Foreign key referencing web site that loads the filter (NULL == global filter", modularizeType: ColumnModularizeType.Column),
206 new ColumnDefinition("Description", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Description displayed in IIS MMC applet"),
207 new ColumnDefinition("Flags", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 2147483647, description: "What do all these numbers mean?"),
208 new ColumnDefinition("LoadOrder", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "-1 == last in order, 0 == first in order, # == place in order"),
209 },
210 tupleDefinitionName: "IIsFilter",
211 tupleIdIsPrimaryKey: true
212 );
213
214 public static readonly TableDefinition IIsWebDir = new TableDefinition(
215 "IIsWebDir",
216 new[]
217 {
218 new ColumnDefinition("WebDir", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token", modularizeType: ColumnModularizeType.Column),
219 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key referencing Component that controls the virtual directory", modularizeType: ColumnModularizeType.Column),
220 new ColumnDefinition("Web_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "IIsWebSite", keyColumn: 1, description: "Foreign key referencing web site that controls the virtual directory", modularizeType: ColumnModularizeType.Column),
221 new ColumnDefinition("Path", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Name of web directory displayed in IIS MMC applet", modularizeType: ColumnModularizeType.Property),
222 new ColumnDefinition("DirProperties_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "IIsWebDirProperties", keyColumn: 1, description: "Foreign key referencing possible security information for the virtual directory", modularizeType: ColumnModularizeType.Column),
223 new ColumnDefinition("Application_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "IIsWebApplication", keyColumn: 1, description: "Foreign key referencing possible ASP application for the virtual directory. This column is currently unused, but maintained for compatibility reasons.", modularizeType: ColumnModularizeType.Column),
224 },
225 tupleDefinitionName: "IIsWebDir",
226 tupleIdIsPrimaryKey: true
227 );
228
229 public static readonly TableDefinition IIsWebError = new TableDefinition(
230 "IIsWebError",
231 new[]
232 {
233 new ColumnDefinition("ErrorCode", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, minValue: 400, maxValue: 599, description: "HTTP status code indicating error."),
234 new ColumnDefinition("SubCode", ColumnType.Number, 4, primaryKey: true, nullable: false, ColumnCategory.Unknown, description: "HTTP sub-status code indicating error."),
235 new ColumnDefinition("ParentType", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, possibilities: "1;2", description: "Type of parent: 1=vdir, 2=web"),
236 new ColumnDefinition("ParentValue", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of the parent value.", modularizeType: ColumnModularizeType.Column),
237 new ColumnDefinition("File", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Path to file for this custom error (usually file property: [#file]). Must be null if URL is not null."),
238 new ColumnDefinition("URL", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "URL for this custom error. Must be null if File is not null."),
239 },
240 tupleDefinitionName: "IIsWebError",
241 tupleIdIsPrimaryKey: false
242 );
243
244 public static readonly TableDefinition IIsHttpHeader = new TableDefinition(
245 "IIsHttpHeader",
246 new[]
247 {
248 new ColumnDefinition("HttpHeader", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token", modularizeType: ColumnModularizeType.Column),
249 new ColumnDefinition("ParentType", ColumnType.Number, 2, primaryKey: true, nullable: false, ColumnCategory.Unknown, possibilities: "1;2", description: "Type of parent: 1=vdir, 2=web"),
250 new ColumnDefinition("ParentValue", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Name of the parent value.", modularizeType: ColumnModularizeType.Column),
251 new ColumnDefinition("Name", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Name of the HTTP Header"),
252 new ColumnDefinition("Value", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "URL for this custom error. Must be null if File is not null."),
253 new ColumnDefinition("Attributes", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 0, description: "Attributes for HTTP Header: none"),
254 new ColumnDefinition("Sequence", ColumnType.Number, 2, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Order to add the HTTP Headers."),
255 },
256 tupleDefinitionName: "IIsHttpHeader",
257 tupleIdIsPrimaryKey: false
258 );
259
260 public static readonly TableDefinition IIsWebServiceExtension = new TableDefinition(
261 "IIsWebServiceExtension",
262 new[]
263 {
264 new ColumnDefinition("WebServiceExtension", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token", modularizeType: ColumnModularizeType.Column),
265 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key referencing Component that controls the WebServiceExtension handler", modularizeType: ColumnModularizeType.Column),
266 new ColumnDefinition("File", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Path to handler (usually file property: [#file])", modularizeType: ColumnModularizeType.Property),
267 new ColumnDefinition("Description", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Description displayed in WebServiceExtension Wizard", modularizeType: ColumnModularizeType.Property),
268 new ColumnDefinition("Group", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "String used to identify groups of extensions.", modularizeType: ColumnModularizeType.Property),
269 new ColumnDefinition("Attributes", ColumnType.Number, 1, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 3, description: "Attributes for WebServiceExtension: 1 = Allow, 2 = UIDeletable"),
270 },
271 tupleDefinitionName: "IIsWebServiceExtension",
272 tupleIdIsPrimaryKey: true
273 );
274
275 public static readonly TableDefinition IIsWebVirtualDir = new TableDefinition(
276 "IIsWebVirtualDir",
277 new[]
278 {
279 new ColumnDefinition("VirtualDir", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token", modularizeType: ColumnModularizeType.Column),
280 new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key referencing Component that controls the virtual directory", modularizeType: ColumnModularizeType.Column),
281 new ColumnDefinition("Web_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "IIsWebSite", keyColumn: 1, description: "Foreign key referencing web site that controls the virtual directory", modularizeType: ColumnModularizeType.Column),
282 new ColumnDefinition("Alias", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Name of virtual directory displayed in IIS MMC applet", modularizeType: ColumnModularizeType.Property),
283 new ColumnDefinition("Directory_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Directory", keyColumn: 1, description: "Foreign key referencing directory that the virtual directory points at", modularizeType: ColumnModularizeType.Column),
284 new ColumnDefinition("DirProperties_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "IIsWebDirProperties", keyColumn: 1, description: "Foreign key referencing possible security information for the virtual directory", modularizeType: ColumnModularizeType.Column),
285 new ColumnDefinition("Application_", ColumnType.String, 72, primaryKey: false, nullable: true, ColumnCategory.Identifier, keyTable: "IIsWebApplication", keyColumn: 1, description: "Foreign key referencing possible ASP application for the virtual directory", modularizeType: ColumnModularizeType.Column),
286 },
287 tupleDefinitionName: "IIsWebVirtualDir",
288 tupleIdIsPrimaryKey: true
289 );
290
291 public static readonly TableDefinition IIsWebLog = new TableDefinition(
292 "IIsWebLog",
293 new[]
294 {
295 new ColumnDefinition("Log", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "Primary key, non-localized token", modularizeType: ColumnModularizeType.Column),
296 new ColumnDefinition("Format", ColumnType.String, 255, primaryKey: false, nullable: false, ColumnCategory.Text, description: "Type of log format"),
297 },
298 tupleDefinitionName: "IIsWebLog",
299 tupleIdIsPrimaryKey: true
300 );
301
302 public static readonly TableDefinition[] All = new[]
303 {
304 Certificate,
305 CertificateHash,
306 IIsWebSiteCertificates,
307 IIsAppPool,
308 IIsMimeMap,
309 IIsProperty,
310 IIsWebDirProperties,
311 IIsWebAddress,
312 IIsWebSite,
313 IIsWebApplication,
314 IIsWebApplicationExtension,
315 IIsFilter,
316 IIsWebDir,
317 IIsWebError,
318 IIsHttpHeader,
319 IIsWebServiceExtension,
320 IIsWebVirtualDir,
321 IIsWebLog,
322 };
323 }
324}
diff --git a/src/wixext/IisWindowsInstallerBackendBinderExtension.cs b/src/wixext/IisWindowsInstallerBackendBinderExtension.cs
index 50571c34..29d34a09 100644
--- a/src/wixext/IisWindowsInstallerBackendBinderExtension.cs
+++ b/src/wixext/IisWindowsInstallerBackendBinderExtension.cs
@@ -1,34 +1,13 @@
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.Iis 3namespace WixToolset.Iis
4{ 4{
5 using System.Collections.Generic; 5 using System.Collections.Generic;
6 using System.Linq;
7 using System.Xml;
8 using WixToolset.Data;
9 using WixToolset.Data.WindowsInstaller; 6 using WixToolset.Data.WindowsInstaller;
10 using WixToolset.Extensibility; 7 using WixToolset.Extensibility;
11 8
12 public class IisWindowsInstallerBackendBinderExtension : BaseWindowsInstallerBackendBinderExtension 9 public class IisWindowsInstallerBackendBinderExtension : BaseWindowsInstallerBackendBinderExtension
13 { 10 {
14 private static readonly TableDefinition[] Tables = LoadTables(); 11 public override IEnumerable<TableDefinition> TableDefinitions => IisTableDefinitions.All;
15
16 public override IEnumerable<TableDefinition> TableDefinitions { get => Tables; }
17
18 public override bool TryAddTupleToOutput(IntermediateTuple tuple, WindowsInstallerData output)
19 {
20 var columnZeroIsId = tuple.Id != null;
21 return this.BackendHelper.TryAddTupleToOutputMatchingTableDefinitions(tuple, output, this.TableDefinitions, columnZeroIsId);
22 }
23
24 private static TableDefinition[] LoadTables()
25 {
26 using (var resourceStream = typeof(IisWindowsInstallerBackendBinderExtension).Assembly.GetManifestResourceStream("WixToolset.Iis.tables.xml"))
27 using (var reader = XmlReader.Create(resourceStream))
28 {
29 var tables = TableDefinitionCollection.Load(reader);
30 return tables.ToArray();
31 }
32 }
33 } 12 }
34} 13}
diff --git a/src/wixext/Tuples/CertificateHashTuple.cs b/src/wixext/Tuples/CertificateHashTuple.cs
index 6df4c88c..11f0592f 100644
--- a/src/wixext/Tuples/CertificateHashTuple.cs
+++ b/src/wixext/Tuples/CertificateHashTuple.cs
@@ -11,7 +11,7 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.CertificateHash.ToString(), 11 IisTupleDefinitionType.CertificateHash.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(CertificateHashTupleFields.Certificate_), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(CertificateHashTupleFields.CertificateRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(CertificateHashTupleFields.Hash), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(CertificateHashTupleFields.Hash), IntermediateFieldType.String),
16 }, 16 },
17 typeof(CertificateHashTuple)); 17 typeof(CertificateHashTuple));
@@ -24,7 +24,7 @@ namespace WixToolset.Iis.Tuples
24 24
25 public enum CertificateHashTupleFields 25 public enum CertificateHashTupleFields
26 { 26 {
27 Certificate_, 27 CertificateRef,
28 Hash, 28 Hash,
29 } 29 }
30 30
@@ -40,10 +40,10 @@ namespace WixToolset.Iis.Tuples
40 40
41 public IntermediateField this[CertificateHashTupleFields index] => this.Fields[(int)index]; 41 public IntermediateField this[CertificateHashTupleFields index] => this.Fields[(int)index];
42 42
43 public string Certificate_ 43 public string CertificateRef
44 { 44 {
45 get => this.Fields[(int)CertificateHashTupleFields.Certificate_].AsString(); 45 get => this.Fields[(int)CertificateHashTupleFields.CertificateRef].AsString();
46 set => this.Set((int)CertificateHashTupleFields.Certificate_, value); 46 set => this.Set((int)CertificateHashTupleFields.CertificateRef, value);
47 } 47 }
48 48
49 public string Hash 49 public string Hash
diff --git a/src/wixext/Tuples/CertificateTuple.cs b/src/wixext/Tuples/CertificateTuple.cs
index 9e04b783..480a3569 100644
--- a/src/wixext/Tuples/CertificateTuple.cs
+++ b/src/wixext/Tuples/CertificateTuple.cs
@@ -11,13 +11,12 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.Certificate.ToString(), 11 IisTupleDefinitionType.Certificate.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(CertificateTupleFields.Certificate), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(CertificateTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(CertificateTupleFields.Component_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(CertificateTupleFields.Name), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(CertificateTupleFields.Name), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(CertificateTupleFields.StoreLocation), IntermediateFieldType.Number), 16 new IntermediateFieldDefinition(nameof(CertificateTupleFields.StoreLocation), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(CertificateTupleFields.StoreName), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(CertificateTupleFields.StoreName), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(CertificateTupleFields.Attributes), IntermediateFieldType.Number), 18 new IntermediateFieldDefinition(nameof(CertificateTupleFields.Attributes), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(CertificateTupleFields.Binary_), IntermediateFieldType.String), 19 new IntermediateFieldDefinition(nameof(CertificateTupleFields.BinaryRef), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(CertificateTupleFields.CertificatePath), IntermediateFieldType.String), 20 new IntermediateFieldDefinition(nameof(CertificateTupleFields.CertificatePath), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(CertificateTupleFields.PFXPassword), IntermediateFieldType.String), 21 new IntermediateFieldDefinition(nameof(CertificateTupleFields.PFXPassword), IntermediateFieldType.String),
23 }, 22 },
@@ -31,13 +30,12 @@ namespace WixToolset.Iis.Tuples
31 30
32 public enum CertificateTupleFields 31 public enum CertificateTupleFields
33 { 32 {
34 Certificate, 33 ComponentRef,
35 Component_,
36 Name, 34 Name,
37 StoreLocation, 35 StoreLocation,
38 StoreName, 36 StoreName,
39 Attributes, 37 Attributes,
40 Binary_, 38 BinaryRef,
41 CertificatePath, 39 CertificatePath,
42 PFXPassword, 40 PFXPassword,
43 } 41 }
@@ -54,16 +52,10 @@ namespace WixToolset.Iis.Tuples
54 52
55 public IntermediateField this[CertificateTupleFields index] => this.Fields[(int)index]; 53 public IntermediateField this[CertificateTupleFields index] => this.Fields[(int)index];
56 54
57 public string Certificate 55 public string ComponentRef
58 { 56 {
59 get => this.Fields[(int)CertificateTupleFields.Certificate].AsString(); 57 get => this.Fields[(int)CertificateTupleFields.ComponentRef].AsString();
60 set => this.Set((int)CertificateTupleFields.Certificate, value); 58 set => this.Set((int)CertificateTupleFields.ComponentRef, value);
61 }
62
63 public string Component_
64 {
65 get => this.Fields[(int)CertificateTupleFields.Component_].AsString();
66 set => this.Set((int)CertificateTupleFields.Component_, value);
67 } 59 }
68 60
69 public string Name 61 public string Name
@@ -90,10 +82,10 @@ namespace WixToolset.Iis.Tuples
90 set => this.Set((int)CertificateTupleFields.Attributes, value); 82 set => this.Set((int)CertificateTupleFields.Attributes, value);
91 } 83 }
92 84
93 public string Binary_ 85 public string BinaryRef
94 { 86 {
95 get => this.Fields[(int)CertificateTupleFields.Binary_].AsString(); 87 get => this.Fields[(int)CertificateTupleFields.BinaryRef].AsString();
96 set => this.Set((int)CertificateTupleFields.Binary_, value); 88 set => this.Set((int)CertificateTupleFields.BinaryRef, value);
97 } 89 }
98 90
99 public string CertificatePath 91 public string CertificatePath
diff --git a/src/wixext/Tuples/IIsAppPoolTuple.cs b/src/wixext/Tuples/IIsAppPoolTuple.cs
index 10a00f50..d14ec7ad 100644
--- a/src/wixext/Tuples/IIsAppPoolTuple.cs
+++ b/src/wixext/Tuples/IIsAppPoolTuple.cs
@@ -11,11 +11,10 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsAppPool.ToString(), 11 IisTupleDefinitionType.IIsAppPool.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.AppPool), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.Name), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.Component_), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.ComponentRef), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.Attributes), IntermediateFieldType.Number), 16 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.Attributes), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.User_), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.UserRef), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.RecycleMinutes), IntermediateFieldType.Number), 18 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.RecycleMinutes), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.RecycleRequests), IntermediateFieldType.Number), 19 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.RecycleRequests), IntermediateFieldType.Number),
21 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.RecycleTimes), IntermediateFieldType.String), 20 new IntermediateFieldDefinition(nameof(IIsAppPoolTupleFields.RecycleTimes), IntermediateFieldType.String),
@@ -38,11 +37,10 @@ namespace WixToolset.Iis.Tuples
38 37
39 public enum IIsAppPoolTupleFields 38 public enum IIsAppPoolTupleFields
40 { 39 {
41 AppPool,
42 Name, 40 Name,
43 Component_, 41 ComponentRef,
44 Attributes, 42 Attributes,
45 User_, 43 UserRef,
46 RecycleMinutes, 44 RecycleMinutes,
47 RecycleRequests, 45 RecycleRequests,
48 RecycleTimes, 46 RecycleTimes,
@@ -68,22 +66,16 @@ namespace WixToolset.Iis.Tuples
68 66
69 public IntermediateField this[IIsAppPoolTupleFields index] => this.Fields[(int)index]; 67 public IntermediateField this[IIsAppPoolTupleFields index] => this.Fields[(int)index];
70 68
71 public string AppPool
72 {
73 get => this.Fields[(int)IIsAppPoolTupleFields.AppPool].AsString();
74 set => this.Set((int)IIsAppPoolTupleFields.AppPool, value);
75 }
76
77 public string Name 69 public string Name
78 { 70 {
79 get => this.Fields[(int)IIsAppPoolTupleFields.Name].AsString(); 71 get => this.Fields[(int)IIsAppPoolTupleFields.Name].AsString();
80 set => this.Set((int)IIsAppPoolTupleFields.Name, value); 72 set => this.Set((int)IIsAppPoolTupleFields.Name, value);
81 } 73 }
82 74
83 public string Component_ 75 public string ComponentRef
84 { 76 {
85 get => this.Fields[(int)IIsAppPoolTupleFields.Component_].AsString(); 77 get => this.Fields[(int)IIsAppPoolTupleFields.ComponentRef].AsString();
86 set => this.Set((int)IIsAppPoolTupleFields.Component_, value); 78 set => this.Set((int)IIsAppPoolTupleFields.ComponentRef, value);
87 } 79 }
88 80
89 public int Attributes 81 public int Attributes
@@ -92,10 +84,10 @@ namespace WixToolset.Iis.Tuples
92 set => this.Set((int)IIsAppPoolTupleFields.Attributes, value); 84 set => this.Set((int)IIsAppPoolTupleFields.Attributes, value);
93 } 85 }
94 86
95 public string User_ 87 public string UserRef
96 { 88 {
97 get => this.Fields[(int)IIsAppPoolTupleFields.User_].AsString(); 89 get => this.Fields[(int)IIsAppPoolTupleFields.UserRef].AsString();
98 set => this.Set((int)IIsAppPoolTupleFields.User_, value); 90 set => this.Set((int)IIsAppPoolTupleFields.UserRef, value);
99 } 91 }
100 92
101 public int RecycleMinutes 93 public int RecycleMinutes
diff --git a/src/wixext/Tuples/IIsFilterTuple.cs b/src/wixext/Tuples/IIsFilterTuple.cs
index 9c651144..5dda8878 100644
--- a/src/wixext/Tuples/IIsFilterTuple.cs
+++ b/src/wixext/Tuples/IIsFilterTuple.cs
@@ -11,11 +11,10 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsFilter.ToString(), 11 IisTupleDefinitionType.IIsFilter.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.Filter), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.Name), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.Component_), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.ComponentRef), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.Path), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.Path), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.Web_), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.WebRef), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.Description), IntermediateFieldType.String), 18 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.Description), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.Flags), IntermediateFieldType.Number), 19 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.Flags), IntermediateFieldType.Number),
21 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.LoadOrder), IntermediateFieldType.Number), 20 new IntermediateFieldDefinition(nameof(IIsFilterTupleFields.LoadOrder), IntermediateFieldType.Number),
@@ -30,11 +29,10 @@ namespace WixToolset.Iis.Tuples
30 29
31 public enum IIsFilterTupleFields 30 public enum IIsFilterTupleFields
32 { 31 {
33 Filter,
34 Name, 32 Name,
35 Component_, 33 ComponentRef,
36 Path, 34 Path,
37 Web_, 35 WebRef,
38 Description, 36 Description,
39 Flags, 37 Flags,
40 LoadOrder, 38 LoadOrder,
@@ -52,22 +50,16 @@ namespace WixToolset.Iis.Tuples
52 50
53 public IntermediateField this[IIsFilterTupleFields index] => this.Fields[(int)index]; 51 public IntermediateField this[IIsFilterTupleFields index] => this.Fields[(int)index];
54 52
55 public string Filter
56 {
57 get => this.Fields[(int)IIsFilterTupleFields.Filter].AsString();
58 set => this.Set((int)IIsFilterTupleFields.Filter, value);
59 }
60
61 public string Name 53 public string Name
62 { 54 {
63 get => this.Fields[(int)IIsFilterTupleFields.Name].AsString(); 55 get => this.Fields[(int)IIsFilterTupleFields.Name].AsString();
64 set => this.Set((int)IIsFilterTupleFields.Name, value); 56 set => this.Set((int)IIsFilterTupleFields.Name, value);
65 } 57 }
66 58
67 public string Component_ 59 public string ComponentRef
68 { 60 {
69 get => this.Fields[(int)IIsFilterTupleFields.Component_].AsString(); 61 get => this.Fields[(int)IIsFilterTupleFields.ComponentRef].AsString();
70 set => this.Set((int)IIsFilterTupleFields.Component_, value); 62 set => this.Set((int)IIsFilterTupleFields.ComponentRef, value);
71 } 63 }
72 64
73 public string Path 65 public string Path
@@ -76,10 +68,10 @@ namespace WixToolset.Iis.Tuples
76 set => this.Set((int)IIsFilterTupleFields.Path, value); 68 set => this.Set((int)IIsFilterTupleFields.Path, value);
77 } 69 }
78 70
79 public string Web_ 71 public string WebRef
80 { 72 {
81 get => this.Fields[(int)IIsFilterTupleFields.Web_].AsString(); 73 get => this.Fields[(int)IIsFilterTupleFields.WebRef].AsString();
82 set => this.Set((int)IIsFilterTupleFields.Web_, value); 74 set => this.Set((int)IIsFilterTupleFields.WebRef, value);
83 } 75 }
84 76
85 public string Description 77 public string Description
diff --git a/src/wixext/Tuples/IIsMimeMapTuple.cs b/src/wixext/Tuples/IIsMimeMapTuple.cs
index c27aef21..f1a825b0 100644
--- a/src/wixext/Tuples/IIsMimeMapTuple.cs
+++ b/src/wixext/Tuples/IIsMimeMapTuple.cs
@@ -11,7 +11,6 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsMimeMap.ToString(), 11 IisTupleDefinitionType.IIsMimeMap.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsMimeMapTupleFields.MimeMap), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsMimeMapTupleFields.ParentType), IntermediateFieldType.Number), 14 new IntermediateFieldDefinition(nameof(IIsMimeMapTupleFields.ParentType), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(IIsMimeMapTupleFields.ParentValue), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(IIsMimeMapTupleFields.ParentValue), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(IIsMimeMapTupleFields.MimeType), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(IIsMimeMapTupleFields.MimeType), IntermediateFieldType.String),
@@ -27,7 +26,6 @@ namespace WixToolset.Iis.Tuples
27 26
28 public enum IIsMimeMapTupleFields 27 public enum IIsMimeMapTupleFields
29 { 28 {
30 MimeMap,
31 ParentType, 29 ParentType,
32 ParentValue, 30 ParentValue,
33 MimeType, 31 MimeType,
@@ -46,12 +44,6 @@ namespace WixToolset.Iis.Tuples
46 44
47 public IntermediateField this[IIsMimeMapTupleFields index] => this.Fields[(int)index]; 45 public IntermediateField this[IIsMimeMapTupleFields index] => this.Fields[(int)index];
48 46
49 public string MimeMap
50 {
51 get => this.Fields[(int)IIsMimeMapTupleFields.MimeMap].AsString();
52 set => this.Set((int)IIsMimeMapTupleFields.MimeMap, value);
53 }
54
55 public int ParentType 47 public int ParentType
56 { 48 {
57 get => this.Fields[(int)IIsMimeMapTupleFields.ParentType].AsNumber(); 49 get => this.Fields[(int)IIsMimeMapTupleFields.ParentType].AsNumber();
diff --git a/src/wixext/Tuples/IIsPropertyTuple.cs b/src/wixext/Tuples/IIsPropertyTuple.cs
index b02a0b4a..28e882bf 100644
--- a/src/wixext/Tuples/IIsPropertyTuple.cs
+++ b/src/wixext/Tuples/IIsPropertyTuple.cs
@@ -11,8 +11,7 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsProperty.ToString(), 11 IisTupleDefinitionType.IIsProperty.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsPropertyTupleFields.Property), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(IIsPropertyTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsPropertyTupleFields.Component_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(IIsPropertyTupleFields.Attributes), IntermediateFieldType.Number), 15 new IntermediateFieldDefinition(nameof(IIsPropertyTupleFields.Attributes), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(IIsPropertyTupleFields.Value), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(IIsPropertyTupleFields.Value), IntermediateFieldType.String),
18 }, 17 },
@@ -26,8 +25,7 @@ namespace WixToolset.Iis.Tuples
26 25
27 public enum IIsPropertyTupleFields 26 public enum IIsPropertyTupleFields
28 { 27 {
29 Property, 28 ComponentRef,
30 Component_,
31 Attributes, 29 Attributes,
32 Value, 30 Value,
33 } 31 }
@@ -44,16 +42,10 @@ namespace WixToolset.Iis.Tuples
44 42
45 public IntermediateField this[IIsPropertyTupleFields index] => this.Fields[(int)index]; 43 public IntermediateField this[IIsPropertyTupleFields index] => this.Fields[(int)index];
46 44
47 public string Property 45 public string ComponentRef
48 { 46 {
49 get => this.Fields[(int)IIsPropertyTupleFields.Property].AsString(); 47 get => this.Fields[(int)IIsPropertyTupleFields.ComponentRef].AsString();
50 set => this.Set((int)IIsPropertyTupleFields.Property, value); 48 set => this.Set((int)IIsPropertyTupleFields.ComponentRef, value);
51 }
52
53 public string Component_
54 {
55 get => this.Fields[(int)IIsPropertyTupleFields.Component_].AsString();
56 set => this.Set((int)IIsPropertyTupleFields.Component_, value);
57 } 49 }
58 50
59 public int Attributes 51 public int Attributes
diff --git a/src/wixext/Tuples/IIsWebAddressTuple.cs b/src/wixext/Tuples/IIsWebAddressTuple.cs
index cb50b207..603f62cb 100644
--- a/src/wixext/Tuples/IIsWebAddressTuple.cs
+++ b/src/wixext/Tuples/IIsWebAddressTuple.cs
@@ -11,8 +11,7 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsWebAddress.ToString(), 11 IisTupleDefinitionType.IIsWebAddress.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsWebAddressTupleFields.Address), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(IIsWebAddressTupleFields.WebRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsWebAddressTupleFields.Web_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(IIsWebAddressTupleFields.IP), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(IIsWebAddressTupleFields.IP), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(IIsWebAddressTupleFields.Port), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(IIsWebAddressTupleFields.Port), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(IIsWebAddressTupleFields.Header), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(IIsWebAddressTupleFields.Header), IntermediateFieldType.String),
@@ -28,8 +27,7 @@ namespace WixToolset.Iis.Tuples
28 27
29 public enum IIsWebAddressTupleFields 28 public enum IIsWebAddressTupleFields
30 { 29 {
31 Address, 30 WebRef,
32 Web_,
33 IP, 31 IP,
34 Port, 32 Port,
35 Header, 33 Header,
@@ -48,16 +46,10 @@ namespace WixToolset.Iis.Tuples
48 46
49 public IntermediateField this[IIsWebAddressTupleFields index] => this.Fields[(int)index]; 47 public IntermediateField this[IIsWebAddressTupleFields index] => this.Fields[(int)index];
50 48
51 public string Address 49 public string WebRef
52 { 50 {
53 get => this.Fields[(int)IIsWebAddressTupleFields.Address].AsString(); 51 get => this.Fields[(int)IIsWebAddressTupleFields.WebRef].AsString();
54 set => this.Set((int)IIsWebAddressTupleFields.Address, value); 52 set => this.Set((int)IIsWebAddressTupleFields.WebRef, value);
55 }
56
57 public string Web_
58 {
59 get => this.Fields[(int)IIsWebAddressTupleFields.Web_].AsString();
60 set => this.Set((int)IIsWebAddressTupleFields.Web_, value);
61 } 53 }
62 54
63 public string IP 55 public string IP
diff --git a/src/wixext/Tuples/IIsWebApplicationExtensionTuple.cs b/src/wixext/Tuples/IIsWebApplicationExtensionTuple.cs
index 5ae60f57..8ab78dad 100644
--- a/src/wixext/Tuples/IIsWebApplicationExtensionTuple.cs
+++ b/src/wixext/Tuples/IIsWebApplicationExtensionTuple.cs
@@ -11,7 +11,7 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsWebApplicationExtension.ToString(), 11 IisTupleDefinitionType.IIsWebApplicationExtension.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsWebApplicationExtensionTupleFields.Application_), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(IIsWebApplicationExtensionTupleFields.ApplicationRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsWebApplicationExtensionTupleFields.Extension), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(IIsWebApplicationExtensionTupleFields.Extension), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(IIsWebApplicationExtensionTupleFields.Verbs), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(IIsWebApplicationExtensionTupleFields.Verbs), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(IIsWebApplicationExtensionTupleFields.Executable), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(IIsWebApplicationExtensionTupleFields.Executable), IntermediateFieldType.String),
@@ -27,7 +27,7 @@ namespace WixToolset.Iis.Tuples
27 27
28 public enum IIsWebApplicationExtensionTupleFields 28 public enum IIsWebApplicationExtensionTupleFields
29 { 29 {
30 Application_, 30 ApplicationRef,
31 Extension, 31 Extension,
32 Verbs, 32 Verbs,
33 Executable, 33 Executable,
@@ -46,10 +46,10 @@ namespace WixToolset.Iis.Tuples
46 46
47 public IntermediateField this[IIsWebApplicationExtensionTupleFields index] => this.Fields[(int)index]; 47 public IntermediateField this[IIsWebApplicationExtensionTupleFields index] => this.Fields[(int)index];
48 48
49 public string Application_ 49 public string ApplicationRef
50 { 50 {
51 get => this.Fields[(int)IIsWebApplicationExtensionTupleFields.Application_].AsString(); 51 get => this.Fields[(int)IIsWebApplicationExtensionTupleFields.ApplicationRef].AsString();
52 set => this.Set((int)IIsWebApplicationExtensionTupleFields.Application_, value); 52 set => this.Set((int)IIsWebApplicationExtensionTupleFields.ApplicationRef, value);
53 } 53 }
54 54
55 public string Extension 55 public string Extension
diff --git a/src/wixext/Tuples/IIsWebApplicationTuple.cs b/src/wixext/Tuples/IIsWebApplicationTuple.cs
index 403969b7..6af3a2f7 100644
--- a/src/wixext/Tuples/IIsWebApplicationTuple.cs
+++ b/src/wixext/Tuples/IIsWebApplicationTuple.cs
@@ -11,7 +11,6 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsWebApplication.ToString(), 11 IisTupleDefinitionType.IIsWebApplication.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.Application), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.Name), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.Name), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.Isolation), IntermediateFieldType.Number), 15 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.Isolation), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.AllowSessions), IntermediateFieldType.Number), 16 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.AllowSessions), IntermediateFieldType.Number),
@@ -22,7 +21,7 @@ namespace WixToolset.Iis
22 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.ScriptTimeout), IntermediateFieldType.Number), 21 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.ScriptTimeout), IntermediateFieldType.Number),
23 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.ServerDebugging), IntermediateFieldType.Number), 22 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.ServerDebugging), IntermediateFieldType.Number),
24 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.ClientDebugging), IntermediateFieldType.Number), 23 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.ClientDebugging), IntermediateFieldType.Number),
25 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.AppPool_), IntermediateFieldType.String), 24 new IntermediateFieldDefinition(nameof(IIsWebApplicationTupleFields.AppPoolRef), IntermediateFieldType.String),
26 }, 25 },
27 typeof(IIsWebApplicationTuple)); 26 typeof(IIsWebApplicationTuple));
28 } 27 }
@@ -34,7 +33,6 @@ namespace WixToolset.Iis.Tuples
34 33
35 public enum IIsWebApplicationTupleFields 34 public enum IIsWebApplicationTupleFields
36 { 35 {
37 Application,
38 Name, 36 Name,
39 Isolation, 37 Isolation,
40 AllowSessions, 38 AllowSessions,
@@ -45,7 +43,7 @@ namespace WixToolset.Iis.Tuples
45 ScriptTimeout, 43 ScriptTimeout,
46 ServerDebugging, 44 ServerDebugging,
47 ClientDebugging, 45 ClientDebugging,
48 AppPool_, 46 AppPoolRef,
49 } 47 }
50 48
51 public class IIsWebApplicationTuple : IntermediateTuple 49 public class IIsWebApplicationTuple : IntermediateTuple
@@ -60,12 +58,6 @@ namespace WixToolset.Iis.Tuples
60 58
61 public IntermediateField this[IIsWebApplicationTupleFields index] => this.Fields[(int)index]; 59 public IntermediateField this[IIsWebApplicationTupleFields index] => this.Fields[(int)index];
62 60
63 public string Application
64 {
65 get => this.Fields[(int)IIsWebApplicationTupleFields.Application].AsString();
66 set => this.Set((int)IIsWebApplicationTupleFields.Application, value);
67 }
68
69 public string Name 61 public string Name
70 { 62 {
71 get => this.Fields[(int)IIsWebApplicationTupleFields.Name].AsString(); 63 get => this.Fields[(int)IIsWebApplicationTupleFields.Name].AsString();
@@ -126,10 +118,10 @@ namespace WixToolset.Iis.Tuples
126 set => this.Set((int)IIsWebApplicationTupleFields.ClientDebugging, value); 118 set => this.Set((int)IIsWebApplicationTupleFields.ClientDebugging, value);
127 } 119 }
128 120
129 public string AppPool_ 121 public string AppPoolRef
130 { 122 {
131 get => this.Fields[(int)IIsWebApplicationTupleFields.AppPool_].AsString(); 123 get => this.Fields[(int)IIsWebApplicationTupleFields.AppPoolRef].AsString();
132 set => this.Set((int)IIsWebApplicationTupleFields.AppPool_, value); 124 set => this.Set((int)IIsWebApplicationTupleFields.AppPoolRef, value);
133 } 125 }
134 } 126 }
135} \ No newline at end of file 127} \ No newline at end of file
diff --git a/src/wixext/Tuples/IIsWebDirPropertiesTuple.cs b/src/wixext/Tuples/IIsWebDirPropertiesTuple.cs
index 9e723775..1c7cd8bf 100644
--- a/src/wixext/Tuples/IIsWebDirPropertiesTuple.cs
+++ b/src/wixext/Tuples/IIsWebDirPropertiesTuple.cs
@@ -11,10 +11,9 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsWebDirProperties.ToString(), 11 IisTupleDefinitionType.IIsWebDirProperties.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.DirProperties), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.Access), IntermediateFieldType.Number), 14 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.Access), IntermediateFieldType.Number),
16 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.Authorization), IntermediateFieldType.Number), 15 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.Authorization), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.AnonymousUser_), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.AnonymousUserRef), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.IIsControlledPassword), IntermediateFieldType.Number), 17 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.IIsControlledPassword), IntermediateFieldType.Number),
19 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.LogVisits), IntermediateFieldType.Number), 18 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.LogVisits), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.Index), IntermediateFieldType.Number), 19 new IntermediateFieldDefinition(nameof(IIsWebDirPropertiesTupleFields.Index), IntermediateFieldType.Number),
@@ -37,10 +36,9 @@ namespace WixToolset.Iis.Tuples
37 36
38 public enum IIsWebDirPropertiesTupleFields 37 public enum IIsWebDirPropertiesTupleFields
39 { 38 {
40 DirProperties,
41 Access, 39 Access,
42 Authorization, 40 Authorization,
43 AnonymousUser_, 41 AnonymousUserRef,
44 IIsControlledPassword, 42 IIsControlledPassword,
45 LogVisits, 43 LogVisits,
46 Index, 44 Index,
@@ -66,12 +64,6 @@ namespace WixToolset.Iis.Tuples
66 64
67 public IntermediateField this[IIsWebDirPropertiesTupleFields index] => this.Fields[(int)index]; 65 public IntermediateField this[IIsWebDirPropertiesTupleFields index] => this.Fields[(int)index];
68 66
69 public string DirProperties
70 {
71 get => this.Fields[(int)IIsWebDirPropertiesTupleFields.DirProperties].AsString();
72 set => this.Set((int)IIsWebDirPropertiesTupleFields.DirProperties, value);
73 }
74
75 public int Access 67 public int Access
76 { 68 {
77 get => this.Fields[(int)IIsWebDirPropertiesTupleFields.Access].AsNumber(); 69 get => this.Fields[(int)IIsWebDirPropertiesTupleFields.Access].AsNumber();
@@ -84,10 +76,10 @@ namespace WixToolset.Iis.Tuples
84 set => this.Set((int)IIsWebDirPropertiesTupleFields.Authorization, value); 76 set => this.Set((int)IIsWebDirPropertiesTupleFields.Authorization, value);
85 } 77 }
86 78
87 public string AnonymousUser_ 79 public string AnonymousUserRef
88 { 80 {
89 get => this.Fields[(int)IIsWebDirPropertiesTupleFields.AnonymousUser_].AsString(); 81 get => this.Fields[(int)IIsWebDirPropertiesTupleFields.AnonymousUserRef].AsString();
90 set => this.Set((int)IIsWebDirPropertiesTupleFields.AnonymousUser_, value); 82 set => this.Set((int)IIsWebDirPropertiesTupleFields.AnonymousUserRef, value);
91 } 83 }
92 84
93 public int IIsControlledPassword 85 public int IIsControlledPassword
diff --git a/src/wixext/Tuples/IIsWebDirTuple.cs b/src/wixext/Tuples/IIsWebDirTuple.cs
index 6e04b337..471fe223 100644
--- a/src/wixext/Tuples/IIsWebDirTuple.cs
+++ b/src/wixext/Tuples/IIsWebDirTuple.cs
@@ -11,12 +11,11 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsWebDir.ToString(), 11 IisTupleDefinitionType.IIsWebDir.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsWebDirTupleFields.WebDir), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(IIsWebDirTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsWebDirTupleFields.Component_), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(IIsWebDirTupleFields.WebRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(IIsWebDirTupleFields.Web_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(IIsWebDirTupleFields.Path), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(IIsWebDirTupleFields.Path), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(IIsWebDirTupleFields.DirProperties_), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(IIsWebDirTupleFields.DirPropertiesRef), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(IIsWebDirTupleFields.Application_), IntermediateFieldType.String), 18 new IntermediateFieldDefinition(nameof(IIsWebDirTupleFields.ApplicationRef), IntermediateFieldType.String),
20 }, 19 },
21 typeof(IIsWebDirTuple)); 20 typeof(IIsWebDirTuple));
22 } 21 }
@@ -28,12 +27,11 @@ namespace WixToolset.Iis.Tuples
28 27
29 public enum IIsWebDirTupleFields 28 public enum IIsWebDirTupleFields
30 { 29 {
31 WebDir, 30 ComponentRef,
32 Component_, 31 WebRef,
33 Web_,
34 Path, 32 Path,
35 DirProperties_, 33 DirPropertiesRef,
36 Application_, 34 ApplicationRef,
37 } 35 }
38 36
39 public class IIsWebDirTuple : IntermediateTuple 37 public class IIsWebDirTuple : IntermediateTuple
@@ -48,22 +46,16 @@ namespace WixToolset.Iis.Tuples
48 46
49 public IntermediateField this[IIsWebDirTupleFields index] => this.Fields[(int)index]; 47 public IntermediateField this[IIsWebDirTupleFields index] => this.Fields[(int)index];
50 48
51 public string WebDir 49 public string ComponentRef
52 { 50 {
53 get => this.Fields[(int)IIsWebDirTupleFields.WebDir].AsString(); 51 get => this.Fields[(int)IIsWebDirTupleFields.ComponentRef].AsString();
54 set => this.Set((int)IIsWebDirTupleFields.WebDir, value); 52 set => this.Set((int)IIsWebDirTupleFields.ComponentRef, value);
55 } 53 }
56 54
57 public string Component_ 55 public string WebRef
58 { 56 {
59 get => this.Fields[(int)IIsWebDirTupleFields.Component_].AsString(); 57 get => this.Fields[(int)IIsWebDirTupleFields.WebRef].AsString();
60 set => this.Set((int)IIsWebDirTupleFields.Component_, value); 58 set => this.Set((int)IIsWebDirTupleFields.WebRef, value);
61 }
62
63 public string Web_
64 {
65 get => this.Fields[(int)IIsWebDirTupleFields.Web_].AsString();
66 set => this.Set((int)IIsWebDirTupleFields.Web_, value);
67 } 59 }
68 60
69 public string Path 61 public string Path
@@ -72,16 +64,16 @@ namespace WixToolset.Iis.Tuples
72 set => this.Set((int)IIsWebDirTupleFields.Path, value); 64 set => this.Set((int)IIsWebDirTupleFields.Path, value);
73 } 65 }
74 66
75 public string DirProperties_ 67 public string DirPropertiesRef
76 { 68 {
77 get => this.Fields[(int)IIsWebDirTupleFields.DirProperties_].AsString(); 69 get => this.Fields[(int)IIsWebDirTupleFields.DirPropertiesRef].AsString();
78 set => this.Set((int)IIsWebDirTupleFields.DirProperties_, value); 70 set => this.Set((int)IIsWebDirTupleFields.DirPropertiesRef, value);
79 } 71 }
80 72
81 public string Application_ 73 public string ApplicationRef
82 { 74 {
83 get => this.Fields[(int)IIsWebDirTupleFields.Application_].AsString(); 75 get => this.Fields[(int)IIsWebDirTupleFields.ApplicationRef].AsString();
84 set => this.Set((int)IIsWebDirTupleFields.Application_, value); 76 set => this.Set((int)IIsWebDirTupleFields.ApplicationRef, value);
85 } 77 }
86 } 78 }
87} \ No newline at end of file 79} \ No newline at end of file
diff --git a/src/wixext/Tuples/IIsWebLogTuple.cs b/src/wixext/Tuples/IIsWebLogTuple.cs
index 1dfe0862..ec912ac5 100644
--- a/src/wixext/Tuples/IIsWebLogTuple.cs
+++ b/src/wixext/Tuples/IIsWebLogTuple.cs
@@ -11,7 +11,6 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsWebLog.ToString(), 11 IisTupleDefinitionType.IIsWebLog.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsWebLogTupleFields.Log), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsWebLogTupleFields.Format), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(IIsWebLogTupleFields.Format), IntermediateFieldType.String),
16 }, 15 },
17 typeof(IIsWebLogTuple)); 16 typeof(IIsWebLogTuple));
@@ -24,7 +23,6 @@ namespace WixToolset.Iis.Tuples
24 23
25 public enum IIsWebLogTupleFields 24 public enum IIsWebLogTupleFields
26 { 25 {
27 Log,
28 Format, 26 Format,
29 } 27 }
30 28
@@ -40,12 +38,6 @@ namespace WixToolset.Iis.Tuples
40 38
41 public IntermediateField this[IIsWebLogTupleFields index] => this.Fields[(int)index]; 39 public IntermediateField this[IIsWebLogTupleFields index] => this.Fields[(int)index];
42 40
43 public string Log
44 {
45 get => this.Fields[(int)IIsWebLogTupleFields.Log].AsString();
46 set => this.Set((int)IIsWebLogTupleFields.Log, value);
47 }
48
49 public string Format 41 public string Format
50 { 42 {
51 get => this.Fields[(int)IIsWebLogTupleFields.Format].AsString(); 43 get => this.Fields[(int)IIsWebLogTupleFields.Format].AsString();
diff --git a/src/wixext/Tuples/IIsWebServiceExtensionTuple.cs b/src/wixext/Tuples/IIsWebServiceExtensionTuple.cs
index a6fec797..82d9c82a 100644
--- a/src/wixext/Tuples/IIsWebServiceExtensionTuple.cs
+++ b/src/wixext/Tuples/IIsWebServiceExtensionTuple.cs
@@ -11,8 +11,7 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsWebServiceExtension.ToString(), 11 IisTupleDefinitionType.IIsWebServiceExtension.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsWebServiceExtensionTupleFields.WebServiceExtension), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(IIsWebServiceExtensionTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsWebServiceExtensionTupleFields.Component_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(IIsWebServiceExtensionTupleFields.File), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(IIsWebServiceExtensionTupleFields.File), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(IIsWebServiceExtensionTupleFields.Description), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(IIsWebServiceExtensionTupleFields.Description), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(IIsWebServiceExtensionTupleFields.Group), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(IIsWebServiceExtensionTupleFields.Group), IntermediateFieldType.String),
@@ -28,8 +27,7 @@ namespace WixToolset.Iis.Tuples
28 27
29 public enum IIsWebServiceExtensionTupleFields 28 public enum IIsWebServiceExtensionTupleFields
30 { 29 {
31 WebServiceExtension, 30 ComponentRef,
32 Component_,
33 File, 31 File,
34 Description, 32 Description,
35 Group, 33 Group,
@@ -48,16 +46,10 @@ namespace WixToolset.Iis.Tuples
48 46
49 public IntermediateField this[IIsWebServiceExtensionTupleFields index] => this.Fields[(int)index]; 47 public IntermediateField this[IIsWebServiceExtensionTupleFields index] => this.Fields[(int)index];
50 48
51 public string WebServiceExtension 49 public string ComponentRef
52 { 50 {
53 get => this.Fields[(int)IIsWebServiceExtensionTupleFields.WebServiceExtension].AsString(); 51 get => this.Fields[(int)IIsWebServiceExtensionTupleFields.ComponentRef].AsString();
54 set => this.Set((int)IIsWebServiceExtensionTupleFields.WebServiceExtension, value); 52 set => this.Set((int)IIsWebServiceExtensionTupleFields.ComponentRef, value);
55 }
56
57 public string Component_
58 {
59 get => this.Fields[(int)IIsWebServiceExtensionTupleFields.Component_].AsString();
60 set => this.Set((int)IIsWebServiceExtensionTupleFields.Component_, value);
61 } 53 }
62 54
63 public string File 55 public string File
diff --git a/src/wixext/Tuples/IIsWebSiteCertificatesTuple.cs b/src/wixext/Tuples/IIsWebSiteCertificatesTuple.cs
index 711f745f..7e4879d7 100644
--- a/src/wixext/Tuples/IIsWebSiteCertificatesTuple.cs
+++ b/src/wixext/Tuples/IIsWebSiteCertificatesTuple.cs
@@ -11,8 +11,8 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsWebSiteCertificates.ToString(), 11 IisTupleDefinitionType.IIsWebSiteCertificates.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsWebSiteCertificatesTupleFields.Web_), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(IIsWebSiteCertificatesTupleFields.WebRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsWebSiteCertificatesTupleFields.Certificate_), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(IIsWebSiteCertificatesTupleFields.CertificateRef), IntermediateFieldType.String),
16 }, 16 },
17 typeof(IIsWebSiteCertificatesTuple)); 17 typeof(IIsWebSiteCertificatesTuple));
18 } 18 }
@@ -24,8 +24,8 @@ namespace WixToolset.Iis.Tuples
24 24
25 public enum IIsWebSiteCertificatesTupleFields 25 public enum IIsWebSiteCertificatesTupleFields
26 { 26 {
27 Web_, 27 WebRef,
28 Certificate_, 28 CertificateRef,
29 } 29 }
30 30
31 public class IIsWebSiteCertificatesTuple : IntermediateTuple 31 public class IIsWebSiteCertificatesTuple : IntermediateTuple
@@ -40,16 +40,16 @@ namespace WixToolset.Iis.Tuples
40 40
41 public IntermediateField this[IIsWebSiteCertificatesTupleFields index] => this.Fields[(int)index]; 41 public IntermediateField this[IIsWebSiteCertificatesTupleFields index] => this.Fields[(int)index];
42 42
43 public string Web_ 43 public string WebRef
44 { 44 {
45 get => this.Fields[(int)IIsWebSiteCertificatesTupleFields.Web_].AsString(); 45 get => this.Fields[(int)IIsWebSiteCertificatesTupleFields.WebRef].AsString();
46 set => this.Set((int)IIsWebSiteCertificatesTupleFields.Web_, value); 46 set => this.Set((int)IIsWebSiteCertificatesTupleFields.WebRef, value);
47 } 47 }
48 48
49 public string Certificate_ 49 public string CertificateRef
50 { 50 {
51 get => this.Fields[(int)IIsWebSiteCertificatesTupleFields.Certificate_].AsString(); 51 get => this.Fields[(int)IIsWebSiteCertificatesTupleFields.CertificateRef].AsString();
52 set => this.Set((int)IIsWebSiteCertificatesTupleFields.Certificate_, value); 52 set => this.Set((int)IIsWebSiteCertificatesTupleFields.CertificateRef, value);
53 } 53 }
54 } 54 }
55} \ No newline at end of file 55} \ No newline at end of file
diff --git a/src/wixext/Tuples/IIsWebSiteTuple.cs b/src/wixext/Tuples/IIsWebSiteTuple.cs
index 983352a5..610f1c59 100644
--- a/src/wixext/Tuples/IIsWebSiteTuple.cs
+++ b/src/wixext/Tuples/IIsWebSiteTuple.cs
@@ -11,18 +11,17 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsWebSite.ToString(), 11 IisTupleDefinitionType.IIsWebSite.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.Web), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.Component_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.Description), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.Description), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.ConnectionTimeout), IntermediateFieldType.Number), 16 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.ConnectionTimeout), IntermediateFieldType.Number),
18 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.Directory_), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.DirectoryRef), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.State), IntermediateFieldType.Number), 18 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.State), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.Attributes), IntermediateFieldType.Number), 19 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.Attributes), IntermediateFieldType.Number),
21 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.KeyAddress_), IntermediateFieldType.String), 20 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.KeyAddressRef), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.DirProperties_), IntermediateFieldType.String), 21 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.DirPropertiesRef), IntermediateFieldType.String),
23 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.Application_), IntermediateFieldType.String), 22 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.ApplicationRef), IntermediateFieldType.String),
24 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.Sequence), IntermediateFieldType.Number), 23 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.Sequence), IntermediateFieldType.Number),
25 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.Log_), IntermediateFieldType.String), 24 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.LogRef), IntermediateFieldType.String),
26 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.WebsiteId), IntermediateFieldType.String), 25 new IntermediateFieldDefinition(nameof(IIsWebSiteTupleFields.WebsiteId), IntermediateFieldType.String),
27 }, 26 },
28 typeof(IIsWebSiteTuple)); 27 typeof(IIsWebSiteTuple));
@@ -35,18 +34,17 @@ namespace WixToolset.Iis.Tuples
35 34
36 public enum IIsWebSiteTupleFields 35 public enum IIsWebSiteTupleFields
37 { 36 {
38 Web, 37 ComponentRef,
39 Component_,
40 Description, 38 Description,
41 ConnectionTimeout, 39 ConnectionTimeout,
42 Directory_, 40 DirectoryRef,
43 State, 41 State,
44 Attributes, 42 Attributes,
45 KeyAddress_, 43 KeyAddressRef,
46 DirProperties_, 44 DirPropertiesRef,
47 Application_, 45 ApplicationRef,
48 Sequence, 46 Sequence,
49 Log_, 47 LogRef,
50 WebsiteId, 48 WebsiteId,
51 } 49 }
52 50
@@ -62,16 +60,10 @@ namespace WixToolset.Iis.Tuples
62 60
63 public IntermediateField this[IIsWebSiteTupleFields index] => this.Fields[(int)index]; 61 public IntermediateField this[IIsWebSiteTupleFields index] => this.Fields[(int)index];
64 62
65 public string Web 63 public string ComponentRef
66 { 64 {
67 get => this.Fields[(int)IIsWebSiteTupleFields.Web].AsString(); 65 get => this.Fields[(int)IIsWebSiteTupleFields.ComponentRef].AsString();
68 set => this.Set((int)IIsWebSiteTupleFields.Web, value); 66 set => this.Set((int)IIsWebSiteTupleFields.ComponentRef, value);
69 }
70
71 public string Component_
72 {
73 get => this.Fields[(int)IIsWebSiteTupleFields.Component_].AsString();
74 set => this.Set((int)IIsWebSiteTupleFields.Component_, value);
75 } 67 }
76 68
77 public string Description 69 public string Description
@@ -86,10 +78,10 @@ namespace WixToolset.Iis.Tuples
86 set => this.Set((int)IIsWebSiteTupleFields.ConnectionTimeout, value); 78 set => this.Set((int)IIsWebSiteTupleFields.ConnectionTimeout, value);
87 } 79 }
88 80
89 public string Directory_ 81 public string DirectoryRef
90 { 82 {
91 get => this.Fields[(int)IIsWebSiteTupleFields.Directory_].AsString(); 83 get => this.Fields[(int)IIsWebSiteTupleFields.DirectoryRef].AsString();
92 set => this.Set((int)IIsWebSiteTupleFields.Directory_, value); 84 set => this.Set((int)IIsWebSiteTupleFields.DirectoryRef, value);
93 } 85 }
94 86
95 public int State 87 public int State
@@ -104,22 +96,22 @@ namespace WixToolset.Iis.Tuples
104 set => this.Set((int)IIsWebSiteTupleFields.Attributes, value); 96 set => this.Set((int)IIsWebSiteTupleFields.Attributes, value);
105 } 97 }
106 98
107 public string KeyAddress_ 99 public string KeyAddressRef
108 { 100 {
109 get => this.Fields[(int)IIsWebSiteTupleFields.KeyAddress_].AsString(); 101 get => this.Fields[(int)IIsWebSiteTupleFields.KeyAddressRef].AsString();
110 set => this.Set((int)IIsWebSiteTupleFields.KeyAddress_, value); 102 set => this.Set((int)IIsWebSiteTupleFields.KeyAddressRef, value);
111 } 103 }
112 104
113 public string DirProperties_ 105 public string DirPropertiesRef
114 { 106 {
115 get => this.Fields[(int)IIsWebSiteTupleFields.DirProperties_].AsString(); 107 get => this.Fields[(int)IIsWebSiteTupleFields.DirPropertiesRef].AsString();
116 set => this.Set((int)IIsWebSiteTupleFields.DirProperties_, value); 108 set => this.Set((int)IIsWebSiteTupleFields.DirPropertiesRef, value);
117 } 109 }
118 110
119 public string Application_ 111 public string ApplicationRef
120 { 112 {
121 get => this.Fields[(int)IIsWebSiteTupleFields.Application_].AsString(); 113 get => this.Fields[(int)IIsWebSiteTupleFields.ApplicationRef].AsString();
122 set => this.Set((int)IIsWebSiteTupleFields.Application_, value); 114 set => this.Set((int)IIsWebSiteTupleFields.ApplicationRef, value);
123 } 115 }
124 116
125 public int Sequence 117 public int Sequence
@@ -128,10 +120,10 @@ namespace WixToolset.Iis.Tuples
128 set => this.Set((int)IIsWebSiteTupleFields.Sequence, value); 120 set => this.Set((int)IIsWebSiteTupleFields.Sequence, value);
129 } 121 }
130 122
131 public string Log_ 123 public string LogRef
132 { 124 {
133 get => this.Fields[(int)IIsWebSiteTupleFields.Log_].AsString(); 125 get => this.Fields[(int)IIsWebSiteTupleFields.LogRef].AsString();
134 set => this.Set((int)IIsWebSiteTupleFields.Log_, value); 126 set => this.Set((int)IIsWebSiteTupleFields.LogRef, value);
135 } 127 }
136 128
137 public string WebsiteId 129 public string WebsiteId
diff --git a/src/wixext/Tuples/IIsWebVirtualDirTuple.cs b/src/wixext/Tuples/IIsWebVirtualDirTuple.cs
index f80804af..3a624b80 100644
--- a/src/wixext/Tuples/IIsWebVirtualDirTuple.cs
+++ b/src/wixext/Tuples/IIsWebVirtualDirTuple.cs
@@ -11,13 +11,12 @@ namespace WixToolset.Iis
11 IisTupleDefinitionType.IIsWebVirtualDir.ToString(), 11 IisTupleDefinitionType.IIsWebVirtualDir.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.VirtualDir), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.Component_), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.WebRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.Web_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.Alias), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.Alias), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.Directory_), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.DirectoryRef), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.DirProperties_), IntermediateFieldType.String), 18 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.DirPropertiesRef), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.Application_), IntermediateFieldType.String), 19 new IntermediateFieldDefinition(nameof(IIsWebVirtualDirTupleFields.ApplicationRef), IntermediateFieldType.String),
21 }, 20 },
22 typeof(IIsWebVirtualDirTuple)); 21 typeof(IIsWebVirtualDirTuple));
23 } 22 }
@@ -29,13 +28,12 @@ namespace WixToolset.Iis.Tuples
29 28
30 public enum IIsWebVirtualDirTupleFields 29 public enum IIsWebVirtualDirTupleFields
31 { 30 {
32 VirtualDir, 31 ComponentRef,
33 Component_, 32 WebRef,
34 Web_,
35 Alias, 33 Alias,
36 Directory_, 34 DirectoryRef,
37 DirProperties_, 35 DirPropertiesRef,
38 Application_, 36 ApplicationRef,
39 } 37 }
40 38
41 public class IIsWebVirtualDirTuple : IntermediateTuple 39 public class IIsWebVirtualDirTuple : IntermediateTuple
@@ -50,22 +48,16 @@ namespace WixToolset.Iis.Tuples
50 48
51 public IntermediateField this[IIsWebVirtualDirTupleFields index] => this.Fields[(int)index]; 49 public IntermediateField this[IIsWebVirtualDirTupleFields index] => this.Fields[(int)index];
52 50
53 public string VirtualDir 51 public string ComponentRef
54 { 52 {
55 get => this.Fields[(int)IIsWebVirtualDirTupleFields.VirtualDir].AsString(); 53 get => this.Fields[(int)IIsWebVirtualDirTupleFields.ComponentRef].AsString();
56 set => this.Set((int)IIsWebVirtualDirTupleFields.VirtualDir, value); 54 set => this.Set((int)IIsWebVirtualDirTupleFields.ComponentRef, value);
57 } 55 }
58 56
59 public string Component_ 57 public string WebRef
60 { 58 {
61 get => this.Fields[(int)IIsWebVirtualDirTupleFields.Component_].AsString(); 59 get => this.Fields[(int)IIsWebVirtualDirTupleFields.WebRef].AsString();
62 set => this.Set((int)IIsWebVirtualDirTupleFields.Component_, value); 60 set => this.Set((int)IIsWebVirtualDirTupleFields.WebRef, value);
63 }
64
65 public string Web_
66 {
67 get => this.Fields[(int)IIsWebVirtualDirTupleFields.Web_].AsString();
68 set => this.Set((int)IIsWebVirtualDirTupleFields.Web_, value);
69 } 61 }
70 62
71 public string Alias 63 public string Alias
@@ -74,22 +66,22 @@ namespace WixToolset.Iis.Tuples
74 set => this.Set((int)IIsWebVirtualDirTupleFields.Alias, value); 66 set => this.Set((int)IIsWebVirtualDirTupleFields.Alias, value);
75 } 67 }
76 68
77 public string Directory_ 69 public string DirectoryRef
78 { 70 {
79 get => this.Fields[(int)IIsWebVirtualDirTupleFields.Directory_].AsString(); 71 get => this.Fields[(int)IIsWebVirtualDirTupleFields.DirectoryRef].AsString();
80 set => this.Set((int)IIsWebVirtualDirTupleFields.Directory_, value); 72 set => this.Set((int)IIsWebVirtualDirTupleFields.DirectoryRef, value);
81 } 73 }
82 74
83 public string DirProperties_ 75 public string DirPropertiesRef
84 { 76 {
85 get => this.Fields[(int)IIsWebVirtualDirTupleFields.DirProperties_].AsString(); 77 get => this.Fields[(int)IIsWebVirtualDirTupleFields.DirPropertiesRef].AsString();
86 set => this.Set((int)IIsWebVirtualDirTupleFields.DirProperties_, value); 78 set => this.Set((int)IIsWebVirtualDirTupleFields.DirPropertiesRef, value);
87 } 79 }
88 80
89 public string Application_ 81 public string ApplicationRef
90 { 82 {
91 get => this.Fields[(int)IIsWebVirtualDirTupleFields.Application_].AsString(); 83 get => this.Fields[(int)IIsWebVirtualDirTupleFields.ApplicationRef].AsString();
92 set => this.Set((int)IIsWebVirtualDirTupleFields.Application_, value); 84 set => this.Set((int)IIsWebVirtualDirTupleFields.ApplicationRef, value);
93 } 85 }
94 } 86 }
95} \ No newline at end of file 87} \ No newline at end of file
diff --git a/src/wixext/WixToolset.Iis.wixext.csproj b/src/wixext/WixToolset.Iis.wixext.csproj
index 103d3c18..54ada521 100644
--- a/src/wixext/WixToolset.Iis.wixext.csproj
+++ b/src/wixext/WixToolset.Iis.wixext.csproj
@@ -14,7 +14,6 @@
14 <ItemGroup> 14 <ItemGroup>
15 <Content Include="$(MSBuildThisFileName).targets" /> 15 <Content Include="$(MSBuildThisFileName).targets" />
16 <Content Include="iis.xsd" PackagePath="tools" /> 16 <Content Include="iis.xsd" PackagePath="tools" />
17 <EmbeddedResource Include="tables.xml" />
18 <EmbeddedResource Include="$(OutputPath)..\iis.wixlib" /> 17 <EmbeddedResource Include="$(OutputPath)..\iis.wixlib" />
19 </ItemGroup> 18 </ItemGroup>
20 19
diff --git a/src/wixext/tables.xml b/src/wixext/tables.xml
deleted file mode 100644
index 2aef6f13..00000000
--- a/src/wixext/tables.xml
+++ /dev/null
@@ -1,304 +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<tableDefinitions xmlns="http://wixtoolset.org/schemas/v4/wi/tables">
6 <tableDefinition name="Certificate" createSymbols="yes">
7 <columnDefinition name="Certificate" type="string" length="72" primaryKey="yes" modularize="column"
8 keyColumn="1" category="identifier" description="Identifier for the certificate in the package."/>
9 <columnDefinition name="Component_" type="string" length="72" modularize="column"
10 category="identifier" description="Foreign key into the Component table used to determine install state"/>
11 <columnDefinition name="Name" type="string" length="255"
12 category="formatted" description="Name to be used for the Certificate."/>
13 <columnDefinition name="StoreLocation" type="number" length="2"
14 minValue="1" maxValue="2" description="Location of the target certificate store (CurrentUser == 1, LocalMachine == 2)"/>
15 <columnDefinition name="StoreName" type="string" length="64"
16 category="formatted" description="Name of the target certificate store"/>
17 <columnDefinition name="Attributes" type="number" length="4"
18 minValue="0" maxValue="2147483647" description="Attributes of the certificate"/>
19 <columnDefinition name="Binary_" type="string" length="72" nullable="yes" modularize="column"
20 keyTable="Binary" keyColumn="1" category="identifier" description="Identifier to Binary table containing certificate."/>
21 <columnDefinition name="CertificatePath" type="string" length="0" nullable="yes" modularize="property"
22 category="formatted" description="Property to path of certificate."/>
23 <columnDefinition name="PFXPassword" type="string" length="0" nullable="yes" modularize="property"
24 category="formatted" description="Hidden property to a pfx password"/>
25 </tableDefinition>
26 <tableDefinition name="CertificateHash" createSymbols="yes">
27 <columnDefinition name="Certificate_" type="string" length="72" primaryKey="yes" modularize="column"
28 keyColumn="1" category="identifier" description="Foreign key to certificate in Certificate table."/>
29 <columnDefinition name="Hash" type="string" length="0" nullable="yes"
30 category="text" description="Base64 encoded SHA1 hash of certificate populated at run-time."/>
31 </tableDefinition>
32 <tableDefinition name="IIsWebSiteCertificates">
33 <columnDefinition name="Web_" type="string" length="72" primaryKey="yes" modularize="column"
34 keyTable="IIsWebSite" keyColumn="1" category="identifier" description="The index into the IIsWebSite table."/>
35 <columnDefinition name="Certificate_" type="string" length="72" primaryKey="yes" modularize="column"
36 keyTable="Certificate" keyColumn="1" category="text" description="The index into the Certificate table."/>
37 </tableDefinition>
38 <tableDefinition name="IIsAppPool" createSymbols="yes">
39 <columnDefinition name="AppPool" type="string" length="72" primaryKey="yes" modularize="column"
40 category="identifier" description="Primary key, non-localized token for apppool"/>
41 <columnDefinition name="Name" type="string" length="72" modularize="property"
42 category="formatted" description="Name to be used for the IIs AppPool."/>
43 <columnDefinition name="Component_" type="string" length="72" modularize="column" nullable="yes"
44 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key referencing Component that controls the app pool"/>
45 <columnDefinition name="Attributes" type="number" length="2"
46 description="Attributes of the AppPool"/>
47 <columnDefinition name="User_" type="string" length="72" nullable="yes" modularize="column"
48 keyTable="User" keyColumn="1" category="identifier" description="User account to run the app pool as"/>
49 <columnDefinition name="RecycleMinutes" type="number" length="2" nullable="yes"
50 description="Number of minutes between recycling app pool"/>
51 <columnDefinition name="RecycleRequests" type="number" length="2" nullable="yes"
52 description="Number of requests between recycling app pool"/>
53 <columnDefinition name="RecycleTimes" type="string" length="72" nullable="yes"
54 description="Times to recycle app pool (comma delimited - i.e. 1:45,13:30)"/>
55 <columnDefinition name="IdleTimeout" type="number" length="2" nullable="yes"
56 description="Amount of idle time before shutting down"/>
57 <columnDefinition name="QueueLimit" type="number" length="2" nullable="yes"
58 description="Reject requests after queue gets how large"/>
59 <columnDefinition name="CPUMon" type="string" length="72" nullable="yes"
60 description="CPUMon is a comma delimeted list of the following format: &lt;percent CPU usage&gt;,&lt;refress minutes&gt;,&lt;Action&gt;. The values for Action are 1 (Shutdown) and 0 (No Action)."/>
61 <columnDefinition name="MaxProc" type="number" length="2" nullable="yes"
62 description="Maximum number of processes to use"/>
63 <columnDefinition name="VirtualMemory" type="number" length="4" nullable="yes"
64 description="Amount of virtual memory (in KB) that a worker process can use before the worker process recycles. The maximum value supported for this field is 4,294,967 KB."/>
65 <columnDefinition name="PrivateMemory" type="number" length="4" nullable="yes"
66 description="Amount of private memory (in KB) that a worker process can use before the worker process recycles. The maximum value supported for this field is 4,294,967 KB."/>
67 <columnDefinition name="ManagedRuntimeVersion" type="string" length="72" nullable="yes"
68 description="Specifies the .NET Framework version to be used by the application pool."/>
69 <columnDefinition name="ManagedPipelineMode" type="string" length="72" nullable="yes"
70 description="Specifies the request-processing mode that is used to process requests for managed content."/>
71 </tableDefinition>
72 <tableDefinition name="IIsMimeMap">
73 <columnDefinition name="MimeMap" type="string" length="72" primaryKey="yes" modularize="column"
74 category="identifier" description="Primary key, non-localized token for Mime Map definitions"/>
75 <columnDefinition name="ParentType" type="number" length="2"
76 set="1;2" description="Type of parent: 1=vdir 2=website"/>
77 <columnDefinition name="ParentValue" type="string" length="72" modularize="column"
78 category="identifier" description="Name of the parent value."/>
79 <columnDefinition name="MimeType" type="string" length="72"
80 category="text" description="Mime-type covered by the MimeMap."/>
81 <columnDefinition name="Extension" type="string" length="72"
82 category="text" description="Extension covered by the MimeMap."/>
83 </tableDefinition>
84 <tableDefinition name="IIsProperty">
85 <columnDefinition name="Property" type="string" length="72" primaryKey="yes"
86 category="identifier" description="Unique name of the IIsProperty"/>
87 <columnDefinition name="Component_" type="string" length="72" modularize="column"
88 keyTable="Component" keyColumn="1" category="identifier" description="Component that the property is linked to" />
89 <columnDefinition name="Attributes" type="number" length="2"
90 description="Attributes of the IIsProperty (unused)"/>
91 <columnDefinition name="Value" type="string" length="72" nullable="yes"
92 description="Value of the IIsProperty"/>
93 </tableDefinition>
94 <tableDefinition name="IIsWebDirProperties" createSymbols="yes">
95 <columnDefinition name="DirProperties" type="string" length="72" primaryKey="yes" modularize="column"
96 category="identifier" description="Primary key, non-localized token for Web Properties"/>
97 <columnDefinition name="Access" type="number" length="2" nullable="yes"
98 description="Access rights to the web server"/>
99 <columnDefinition name="Authorization" type="number" length="2" nullable="yes"
100 description="Authorization policy to web server (anonymous access, NTLM, etc)"/>
101 <columnDefinition name="AnonymousUser_" type="string" length="72" nullable="yes" modularize="column"
102 keyTable="User" keyColumn="1" category="identifier" description="Foreign key, User used to log into database"/>
103 <columnDefinition name="IIsControlledPassword" type="number" length="2" nullable="yes"
104 set="0;1" description="Specifies whether IIs is allowed to set the AnonymousUser_ password"/>
105 <columnDefinition name="LogVisits" type="number" length="2" nullable="yes"
106 set="0;1" description="Specifies whether IIs tracks all access to the directory"/>
107 <columnDefinition name="Index" type="number" length="2" nullable="yes"
108 set="0;1" description="Specifies whether IIs searches the directory"/>
109 <columnDefinition name="DefaultDoc" type="string" length="255" nullable="yes"
110 category="text" description="Comma delimited list of file names to act as a default document"/>
111 <columnDefinition name="AspDetailedError" type="number" length="2" nullable="yes"
112 set="0;1" description="Specifies whether detailed ASP errors are sent to browser"/>
113 <columnDefinition name="HttpExpires" type="string" length="255" nullable="yes" escapeIdtCharacters="yes"
114 category="text" description="Value to set the HttpExpires attribute to for a Web Dir in the metabase"/>
115 <columnDefinition name="CacheControlMaxAge" type="number" length="4" nullable="yes"
116 description="Integer value specifying the cache control maximum age value."/>
117 <columnDefinition name="CacheControlCustom" type="string" length="255" nullable="yes" escapeIdtCharacters="yes"
118 category="text" description="Custom HTTP 1.1 cache control directives."/>
119 <columnDefinition name="NoCustomError" type="number" length="2" nullable="yes"
120 set="0;1" description="Specifies whether IIs will return custom errors for this directory."/>
121 <columnDefinition name="AccessSSLFlags" type="number" length="2" nullable="yes"
122 description="Specifies AccessSSLFlags IIS metabase property."/>
123 <columnDefinition name="AuthenticationProviders" type="string" length="255" nullable="yes"
124 category="text" description="Comma delimited list, in order of precedence, of Windows authentication providers that IIS will attempt to use: NTLM, Kerberos, Negotiate, and others."/>
125 </tableDefinition>
126 <tableDefinition name="IIsWebAddress" createSymbols="yes">
127 <columnDefinition name="Address" type="string" length="72" primaryKey="yes" modularize="column"
128 category="identifier" description="Primary key, non-localized token"/>
129 <columnDefinition name="Web_" type="string" length="72" modularize="column"
130 keyTable="IIsWebSite" keyColumn="1" category="identifier" description="Foreign key referencing Web that uses the address."/>
131 <columnDefinition name="IP" type="string" length="255" nullable="yes" modularize="property"
132 category="text" description="String representing IP address (#.#.#.#) or NT machine name (fooserver)"/>
133 <columnDefinition name="Port" type="string" length="72" modularize="property"
134 category="formatted" description="Port web site listens on"/>
135 <columnDefinition name="Header" type="string" length="255" nullable="yes"
136 category="text" description="Special header information for the web site"/>
137 <columnDefinition name="Secure" type="number" length="2" nullable="yes"
138 set="0;1" description="Specifies whether SSL is used to communicate with web site"/>
139 </tableDefinition>
140 <tableDefinition name="IIsWebSite" createSymbols="yes">
141 <columnDefinition name="Web" type="string" length="72" primaryKey="yes" modularize="column"
142 category="identifier" description="Primary key, non-localized token"/>
143 <columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column"
144 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key referencing Component that controls the web site"/>
145 <columnDefinition name="Description" type="string" length="255" nullable="yes"
146 category="formatted" description="Description displayed in IIS MMC applet"/>
147 <columnDefinition name="ConnectionTimeout" type="number" length="2" nullable="yes"
148 description="Time connection is maintained without activity (in seconds)"/>
149 <columnDefinition name="Directory_" type="string" length="72" nullable="yes" modularize="column"
150 keyTable="Directory" keyColumn="1" category="identifier" description="Foreign key referencing directory that the web site points at"/>
151 <columnDefinition name="State" type="number" length="2" nullable="yes"
152 set="0;1;2" description="Sets intial state of web site"/>
153 <columnDefinition name="Attributes" type="number" length="2" nullable="yes"
154 set="2" description="Control the install behavior of web site"/>
155 <columnDefinition name="KeyAddress_" type="string" length="72" modularize="column"
156 keyTable="IIsWebAddress" keyColumn="1" category="identifier" description="Foreign key referencing primary address for the web site"/>
157 <columnDefinition name="DirProperties_" type="string" length="72" nullable="yes" modularize="column"
158 keyTable="IIsWebDirProperties" keyColumn="1" category="identifier" description="Foreign key referencing possible security information for the web site"/>
159 <columnDefinition name="Application_" type="string" length="72" nullable="yes" modularize="column"
160 keyTable="IIsWebApplication" keyColumn="1" category="identifier" description="Foreign key referencing possible ASP application for the web site."/>
161 <columnDefinition name="Sequence" type="number" length="2" nullable="yes"
162 description="Allows ordering of web site install"/>
163 <columnDefinition name="Log_" type="string" length="72" nullable="yes" modularize="column"
164 keyTable="IIsWebLog" keyColumn="1" description="Foreign key reference to IIsWebLog data"/>
165 <columnDefinition name="Id" type="string" length="74" nullable="yes"
166 category="formatted" description="Optional number or formatted value that resolves to number that acts as the WebSite Id."/>
167 </tableDefinition>
168 <tableDefinition name="IIsWebApplication" createSymbols="yes">
169 <columnDefinition name="Application" type="string" length="72" primaryKey="yes" modularize="column"
170 category="identifier" description="Primary key, non-localized token for ASP Application"/>
171 <columnDefinition name="Name" type="localized" length="255" modularize="property"
172 category="formatted" description="Name of application in IIS MMC applet"/>
173 <columnDefinition name="Isolation" type="number" length="2"
174 set="0;1;2" description="Isolation level for ASP Application: 0 == Low, 2 == Medium, 1 == High"/>
175 <columnDefinition name="AllowSessions" type="number" length="2" nullable="yes"
176 set="0;1" description="Specifies whether application may maintain session state"/>
177 <columnDefinition name="SessionTimeout" type="number" length="2" nullable="yes"
178 description="Time session state is maintained without user interaction"/>
179 <columnDefinition name="Buffer" type="number" length="2" nullable="yes"
180 set="0;1" description="Specifies whether application buffers its output"/>
181 <columnDefinition name="ParentPaths" type="number" length="2" nullable="yes"
182 set="0;1" description="What is this for anyway?"/>
183 <columnDefinition name="DefaultScript" type="string" length="26" nullable="yes"
184 category="text" set="VBScript;JScript" description="Default scripting language for ASP applications"/>
185 <columnDefinition name="ScriptTimeout" type="number" length="2" nullable="yes"
186 description="Time ASP application page is permitted to process"/>
187 <columnDefinition name="ServerDebugging" type="number" length="2" nullable="yes"
188 set="0;1" description="Specifies whether to allow ASP server-side script debugging"/>
189 <columnDefinition name="ClientDebugging" type="number" length="2" nullable="yes"
190 set="0;1" description="Specifies whether to allow ASP client-side script debugging"/>
191 <columnDefinition name="AppPool_" type="string" length="72" nullable="yes" modularize="column"
192 keyTable="IIsAppPool" keyColumn="1" category="identifier" description="App Pool this application should run under"/>
193 </tableDefinition>
194 <tableDefinition name="IIsWebApplicationExtension" createSymbols="yes">
195 <columnDefinition name="Application_" type="string" length="72" primaryKey="yes" modularize="column"
196 keyTable="IIsWebApplication" keyColumn="1" category="identifier" description="Foreign key referencing possible ASP application for the web site"/>
197 <columnDefinition name="Extension" type="string" length="255" primaryKey="yes" nullable="yes"
198 category="text" description="Primary key, Extension that should be registered for this ASP application"/>
199 <columnDefinition name="Verbs" type="string" length="255" nullable="yes"
200 category="text" description="Comma delimited list of HTTP verbs the extension should be registered with"/>
201 <columnDefinition name="Executable" type="string" length="255" modularize="property"
202 category="formatted" description="Path to extension (usually file property: [#file])"/>
203 <columnDefinition name="Attributes" type="number" length="2" nullable="yes"
204 set="1;4;5" description="Attributes for extension: 1 == Script, 4 == Check Path Info"/>
205 </tableDefinition>
206 <tableDefinition name="IIsFilter" createSymbols="yes">
207 <columnDefinition name="Filter" type="string" length="72" primaryKey="yes" modularize="column"
208 category="identifier" description="Primary key, non-localized token"/>
209 <columnDefinition name="Name" type="string" length="72"
210 description="Name of the ISAPI Filter in IIS"/>
211 <columnDefinition name="Component_" type="string" length="72" modularize="column"
212 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key referencing Component that controls the filter"/>
213 <columnDefinition name="Path" type="string" length="255" nullable="yes" modularize="property"
214 category="formatted" description="Path to filter (usually file property: [#file])"/>
215 <columnDefinition name="Web_" type="string" length="72" nullable="yes" modularize="column"
216 keyTable="IIsWebSite" keyColumn="1" category="identifier" description="Foreign key referencing web site that loads the filter (NULL == global filter"/>
217 <columnDefinition name="Description" type="string" length="255" nullable="yes"
218 category="formatted" description="Description displayed in IIS MMC applet"/>
219 <columnDefinition name="Flags" type="number" length="4"
220 minValue="0" maxValue="2147483647" description="What do all these numbers mean?"/>
221 <columnDefinition name="LoadOrder" type="number" length="2" nullable="yes"
222 description="-1 == last in order, 0 == first in order, # == place in order"/>
223 </tableDefinition>
224 <tableDefinition name="IIsWebDir" createSymbols="yes">
225 <columnDefinition name="WebDir" type="string" length="72" primaryKey="yes" modularize="column"
226 category="identifier" description="Primary key, non-localized token"/>
227 <columnDefinition name="Component_" type="string" length="72" modularize="column"
228 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key referencing Component that controls the virtual directory"/>
229 <columnDefinition name="Web_" type="string" length="72" modularize="column"
230 keyTable="IIsWebSite" keyColumn="1" category="identifier" description="Foreign key referencing web site that controls the virtual directory"/>
231 <columnDefinition name="Path" type="string" length="255" modularize="property"
232 category="formatted" description="Name of web directory displayed in IIS MMC applet"/>
233 <columnDefinition name="DirProperties_" type="string" length="72" nullable="yes" modularize="column"
234 keyTable="IIsWebDirProperties" keyColumn="1" category="identifier" description="Foreign key referencing possible security information for the virtual directory"/>
235 <columnDefinition name="Application_" type="string" length="72" nullable="yes" modularize="column"
236 keyTable="IIsWebApplication" keyColumn="1" category="identifier" description="Foreign key referencing possible ASP application for the virtual directory. This column is currently unused, but maintained for compatibility reasons."/>
237 </tableDefinition>
238 <tableDefinition name="IIsWebError">
239 <columnDefinition name="ErrorCode" type="number" length="2" primaryKey="yes"
240 minValue="400" maxValue="599" description="HTTP status code indicating error."/>
241 <columnDefinition name="SubCode" type="number" length="4" primaryKey="yes"
242 description="HTTP sub-status code indicating error."/>
243 <columnDefinition name="ParentType" type="number" length="2" primaryKey="yes"
244 set="1;2" description="Type of parent: 1=vdir, 2=web"/>
245 <columnDefinition name="ParentValue" type="string" length="72" modularize="column" primaryKey="yes"
246 category="identifier" description="Name of the parent value."/>
247 <columnDefinition name="File" type="string" length="255" nullable="yes"
248 category="formatted" description="Path to file for this custom error (usually file property: [#file]). Must be null if URL is not null."/>
249 <columnDefinition name="URL" type="string" length="255" nullable="yes"
250 category="formatted" description="URL for this custom error. Must be null if File is not null."/>
251 </tableDefinition>
252 <tableDefinition name="IIsHttpHeader" createSymbols="yes">
253 <columnDefinition name="HttpHeader" type="string" length="72" primaryKey="yes" modularize="column"
254 category="identifier" description="Primary key, non-localized token"/>
255 <columnDefinition name="ParentType" type="number" length="2" primaryKey="yes"
256 set="1;2" description="Type of parent: 1=vdir, 2=web"/>
257 <columnDefinition name="ParentValue" type="string" length="72" primaryKey="yes" modularize="column"
258 category="identifier" description="Name of the parent value."/>
259 <columnDefinition name="Name" type="string" length="255"
260 category="text" description="Name of the HTTP Header"/>
261 <columnDefinition name="Value" type="string" length="255" nullable="yes"
262 category="formatted" description="URL for this custom error. Must be null if File is not null."/>
263 <columnDefinition name="Attributes" type="number" length="2"
264 minValue="0" maxValue="0" description="Attributes for HTTP Header: none"/>
265 <columnDefinition name="Sequence" type="number" length="2" nullable="yes"
266 description="Order to add the HTTP Headers."/>
267 </tableDefinition>
268 <tableDefinition name="IIsWebServiceExtension" createSymbols="yes">
269 <columnDefinition name="WebServiceExtension" type="string" length="72" primaryKey="yes" modularize="column"
270 category="identifier" description="Primary key, non-localized token"/>
271 <columnDefinition name="Component_" type="string" length="72" modularize="column"
272 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key referencing Component that controls the WebServiceExtension handler"/>
273 <columnDefinition name="File" type="string" length="255" modularize="property"
274 category="formatted" description="Path to handler (usually file property: [#file])"/>
275 <columnDefinition name="Description" type="localized" length="255" nullable="yes" modularize="property" escapeIdtCharacters="yes"
276 category="formatted" description="Description displayed in WebServiceExtension Wizard"/>
277 <columnDefinition name="Group" type="string" length="255" nullable="yes" modularize="property"
278 category="formatted" description="String used to identify groups of extensions."/>
279 <columnDefinition name="Attributes" type="number" length="1"
280 minValue="0" maxValue="3" description="Attributes for WebServiceExtension: 1 = Allow, 2 = UIDeletable"/>
281 </tableDefinition>
282 <tableDefinition name="IIsWebVirtualDir" createSymbols="yes">
283 <columnDefinition name="VirtualDir" type="string" length="72" primaryKey="yes" modularize="column"
284 category="identifier" description="Primary key, non-localized token"/>
285 <columnDefinition name="Component_" type="string" length="72" modularize="column"
286 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key referencing Component that controls the virtual directory"/>
287 <columnDefinition name="Web_" type="string" length="72" modularize="column"
288 keyTable="IIsWebSite" keyColumn="1" category="identifier" description="Foreign key referencing web site that controls the virtual directory"/>
289 <columnDefinition name="Alias" type="string" length="255" modularize="property"
290 category="formatted" description="Name of virtual directory displayed in IIS MMC applet"/>
291 <columnDefinition name="Directory_" type="string" length="72" modularize="column"
292 keyTable="Directory" keyColumn="1" category="identifier" description="Foreign key referencing directory that the virtual directory points at"/>
293 <columnDefinition name="DirProperties_" type="string" length="72" nullable="yes" modularize="column"
294 keyTable="IIsWebDirProperties" keyColumn="1" category="identifier" description="Foreign key referencing possible security information for the virtual directory"/>
295 <columnDefinition name="Application_" type="string" length="72" nullable="yes" modularize="column"
296 keyTable="IIsWebApplication" keyColumn="1" category="identifier" description="Foreign key referencing possible ASP application for the virtual directory"/>
297 </tableDefinition>
298 <tableDefinition name="IIsWebLog" createSymbols="yes">
299 <columnDefinition name="Log" type="string" length="72" primaryKey="yes" modularize="column"
300 category="identifier" description="Primary key, non-localized token"/>
301 <columnDefinition name="Format" type="string" length="255"
302 category="text" description="Type of log format"/>
303 </tableDefinition>
304</tableDefinitions>
diff --git a/src/wixlib/iis.wixproj b/src/wixlib/iis.wixproj
index c270ab5c..79403583 100644
--- a/src/wixlib/iis.wixproj
+++ b/src/wixlib/iis.wixproj
@@ -1,7 +1,7 @@
1<?xml version="1.0" encoding="utf-8"?> 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. --> 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<Project DefaultTargets="Build" InitialTargets="EnsureWixToolsetInstalled" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0"> 3<Project DefaultTargets="Build" InitialTargets="EnsureWixToolsetInstalled" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0">
4 <Import Project="..\..\packages\WixToolset.MSBuild.4.0.0-build-0080\build\WixToolset.MSBuild.props" Condition="Exists('..\..\packages\WixToolset.MSBuild.4.0.0-build-0080\build\WixToolset.MSBuild.props')" /> 4 <Import Project="..\..\packages\WixToolset.MSBuild.4.0.0-build-0083\build\WixToolset.MSBuild.props" Condition="Exists('..\..\packages\WixToolset.MSBuild.4.0.0-build-0083\build\WixToolset.MSBuild.props')" />
5 <Import Project="..\FindLocalWix.props" /> 5 <Import Project="..\FindLocalWix.props" />
6 <PropertyGroup> 6 <PropertyGroup>
7 <ProjectGuid>{92FE99D2-355D-4F52-A7C1-10EECB4A5BB1}</ProjectGuid> 7 <ProjectGuid>{92FE99D2-355D-4F52-A7C1-10EECB4A5BB1}</ProjectGuid>
@@ -38,7 +38,7 @@
38 <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> 38 <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
39 </PropertyGroup> 39 </PropertyGroup>
40 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets'))" /> 40 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets'))" />
41 <Error Condition="!Exists('..\..\packages\WixToolset.MSBuild.4.0.0-build-0080\build\WixToolset.MSBuild.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.MSBuild.4.0.0-build-0080\build\WixToolset.MSBuild.props'))" /> 41 <Error Condition="!Exists('..\..\packages\WixToolset.MSBuild.4.0.0-build-0083\build\WixToolset.MSBuild.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.MSBuild.4.0.0-build-0083\build\WixToolset.MSBuild.props'))" />
42 </Target> 42 </Target>
43 <Import Project="..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets" Condition="Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" /> 43 <Import Project="..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets" Condition="Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" />
44</Project> \ No newline at end of file 44</Project> \ No newline at end of file
diff --git a/src/wixlib/packages.config b/src/wixlib/packages.config
index 25b4e6a9..d73f4d3a 100644
--- a/src/wixlib/packages.config
+++ b/src/wixlib/packages.config
@@ -1,5 +1,5 @@
1<?xml version="1.0" encoding="utf-8"?> 1<?xml version="1.0" encoding="utf-8"?>
2<packages> 2<packages>
3 <package id="Nerdbank.GitVersioning" version="2.1.65" developmentDependency="true" targetFramework="net40" /> 3 <package id="Nerdbank.GitVersioning" version="2.1.65" developmentDependency="true" targetFramework="net40" />
4 <package id="WixToolset.MSBuild" version="4.0.0-build-0080" developmentDependency="true" targetFramework="net40" /> 4 <package id="WixToolset.MSBuild" version="4.0.0-build-0083" developmentDependency="true" targetFramework="net40" />
5</packages> \ No newline at end of file 5</packages> \ No newline at end of file