aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-12-08 15:09:31 -0600
committerSean Hall <r.sean.hall@gmail.com>2020-12-08 15:18:03 -0600
commit0106f99945266b2391b18a8389d056375cfff0b0 (patch)
tree59de6526892e962aa987692c77891aa8aea6665e
parent3261d8d93365d866f5323b7806837655f1e5e084 (diff)
downloadwix-0106f99945266b2391b18a8389d056375cfff0b0.tar.gz
wix-0106f99945266b2391b18a8389d056375cfff0b0.tar.bz2
wix-0106f99945266b2391b18a8389d056375cfff0b0.zip
WIXFEAT:6209 - Move BA entry point to its own element.
-rw-r--r--src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs8
-rw-r--r--src/WixToolset.Core.Burn/Bind/GenerateManifestDataFromIRCommand.cs1
-rw-r--r--src/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs10
-rw-r--r--src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs10
-rw-r--r--src/WixToolset.Core/Compiler_Bundle.cs101
-rw-r--r--src/test/Example.Extension/Data/example.wxs5
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/BundleWithPackageGroupRef/Bundle.wxs5
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/Bundle.wxs15
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/MultiFileBootstrapperApplication.wxs5
9 files changed, 101 insertions, 59 deletions
diff --git a/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs b/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs
index 8522eb3e..2c8231f8 100644
--- a/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs
+++ b/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs
@@ -101,10 +101,10 @@ namespace WixToolset.Core.Burn
101 101
102 bundleSymbol.Attributes |= WixBundleAttributes.PerMachine; // default to per-machine but the first-per user package wil flip the bundle per-user. 102 bundleSymbol.Attributes |= WixBundleAttributes.PerMachine; // default to per-machine but the first-per user package wil flip the bundle per-user.
103 103
104 // Ensure there is one and only one row in the WixBootstrapperApplication table. 104 // Ensure there is one and only one row in the WixBootstrapperApplicationDll table.
105 // The compiler and linker behavior should have colluded to get 105 // The compiler and linker behavior should have colluded to get
106 // this behavior. 106 // this behavior.
107 var bundleApplicationSymbol = this.GetSingleSymbol<WixBootstrapperApplicationSymbol>(); 107 var bundleApplicationDllSymbol = this.GetSingleSymbol<WixBootstrapperApplicationDllSymbol>();
108 108
109 // Ensure there is one and only one row in the WixChain table. 109 // Ensure there is one and only one row in the WixChain table.
110 // The compiler and linker behavior should have colluded to get 110 // The compiler and linker behavior should have colluded to get
@@ -440,7 +440,7 @@ namespace WixToolset.Core.Burn
440 IEnumerable<WixBundlePayloadSymbol> uxPayloads; 440 IEnumerable<WixBundlePayloadSymbol> uxPayloads;
441 IEnumerable<WixBundleContainerSymbol> containers; 441 IEnumerable<WixBundleContainerSymbol> containers;
442 { 442 {
443 var command = new CreateNonUXContainers(this.BackendHelper, section, bundleApplicationSymbol, payloadSymbols, this.IntermediateFolder, layoutDirectory, this.DefaultCompressionLevel); 443 var command = new CreateNonUXContainers(this.BackendHelper, section, bundleApplicationDllSymbol, payloadSymbols, this.IntermediateFolder, layoutDirectory, this.DefaultCompressionLevel);
444 command.Execute(); 444 command.Execute();
445 445
446 fileTransfers.AddRange(command.FileTransfers); 446 fileTransfers.AddRange(command.FileTransfers);
@@ -475,7 +475,7 @@ namespace WixToolset.Core.Burn
475 } 475 }
476 476
477 { 477 {
478 var command = new CreateBundleExeCommand(this.Messaging, this.BackendHelper, this.IntermediateFolder, this.OutputPath, bundleApplicationSymbol, bundleSymbol, uxContainer, containers); 478 var command = new CreateBundleExeCommand(this.Messaging, this.BackendHelper, this.IntermediateFolder, this.OutputPath, bundleApplicationDllSymbol, bundleSymbol, uxContainer, containers);
479 command.Execute(); 479 command.Execute();
480 480
481 fileTransfers.Add(command.Transfer); 481 fileTransfers.Add(command.Transfer);
diff --git a/src/WixToolset.Core.Burn/Bind/GenerateManifestDataFromIRCommand.cs b/src/WixToolset.Core.Burn/Bind/GenerateManifestDataFromIRCommand.cs
index 29768dff..24a4ae67 100644
--- a/src/WixToolset.Core.Burn/Bind/GenerateManifestDataFromIRCommand.cs
+++ b/src/WixToolset.Core.Burn/Bind/GenerateManifestDataFromIRCommand.cs
@@ -61,6 +61,7 @@ namespace WixToolset.Core.Burn.Bind
61 case SymbolDefinitionType.ProvidesDependency: 61 case SymbolDefinitionType.ProvidesDependency:
62 case SymbolDefinitionType.WixApprovedExeForElevation: 62 case SymbolDefinitionType.WixApprovedExeForElevation:
63 case SymbolDefinitionType.WixBootstrapperApplication: 63 case SymbolDefinitionType.WixBootstrapperApplication:
64 case SymbolDefinitionType.WixBootstrapperApplicationDll:
64 case SymbolDefinitionType.WixBundle: 65 case SymbolDefinitionType.WixBundle:
65 case SymbolDefinitionType.WixBundleCatalog: 66 case SymbolDefinitionType.WixBundleCatalog:
66 case SymbolDefinitionType.WixBundleContainer: 67 case SymbolDefinitionType.WixBundleContainer:
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs
index 0355cdc6..576ac348 100644
--- a/src/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs
@@ -17,13 +17,13 @@ namespace WixToolset.Core.Burn.Bundles
17 17
18 internal class CreateBundleExeCommand 18 internal class CreateBundleExeCommand
19 { 19 {
20 public CreateBundleExeCommand(IMessaging messaging, IBackendHelper backendHelper, string intermediateFolder, string outputPath, WixBootstrapperApplicationSymbol bootstrapperApplicationSymbol, WixBundleSymbol bundleSymbol, WixBundleContainerSymbol uxContainer, IEnumerable<WixBundleContainerSymbol> containers) 20 public CreateBundleExeCommand(IMessaging messaging, IBackendHelper backendHelper, string intermediateFolder, string outputPath, WixBootstrapperApplicationDllSymbol bootstrapperApplicationDllSymbol, WixBundleSymbol bundleSymbol, WixBundleContainerSymbol uxContainer, IEnumerable<WixBundleContainerSymbol> containers)
21 { 21 {
22 this.Messaging = messaging; 22 this.Messaging = messaging;
23 this.BackendHelper = backendHelper; 23 this.BackendHelper = backendHelper;
24 this.IntermediateFolder = intermediateFolder; 24 this.IntermediateFolder = intermediateFolder;
25 this.OutputPath = outputPath; 25 this.OutputPath = outputPath;
26 this.BootstrapperApplicationSymbol = bootstrapperApplicationSymbol; 26 this.BootstrapperApplicationDllSymbol = bootstrapperApplicationDllSymbol;
27 this.BundleSymbol = bundleSymbol; 27 this.BundleSymbol = bundleSymbol;
28 this.UXContainer = uxContainer; 28 this.UXContainer = uxContainer;
29 this.Containers = containers; 29 this.Containers = containers;
@@ -39,7 +39,7 @@ namespace WixToolset.Core.Burn.Bundles
39 39
40 private string OutputPath { get; } 40 private string OutputPath { get; }
41 41
42 private WixBootstrapperApplicationSymbol BootstrapperApplicationSymbol { get; } 42 private WixBootstrapperApplicationDllSymbol BootstrapperApplicationDllSymbol { get; }
43 43
44 private WixBundleSymbol BundleSymbol { get; } 44 private WixBundleSymbol BundleSymbol { get; }
45 45
@@ -72,7 +72,7 @@ namespace WixToolset.Core.Burn.Bundles
72 72
73 var windowsAssemblyVersion = GetWindowsAssemblyVersion(this.BundleSymbol); 73 var windowsAssemblyVersion = GetWindowsAssemblyVersion(this.BundleSymbol);
74 74
75 var applicationManifestData = GenerateApplicationManifest(this.BundleSymbol, this.BootstrapperApplicationSymbol, this.OutputPath, windowsAssemblyVersion); 75 var applicationManifestData = GenerateApplicationManifest(this.BundleSymbol, this.BootstrapperApplicationDllSymbol, this.OutputPath, windowsAssemblyVersion);
76 76
77 UpdateBurnResources(bundleTempPath, this.OutputPath, this.BundleSymbol, windowsAssemblyVersion, applicationManifestData); 77 UpdateBurnResources(bundleTempPath, this.OutputPath, this.BundleSymbol, windowsAssemblyVersion, applicationManifestData);
78 78
@@ -101,7 +101,7 @@ namespace WixToolset.Core.Burn.Bundles
101 } 101 }
102 } 102 }
103 103
104 private static byte[] GenerateApplicationManifest(WixBundleSymbol bundleSymbol, WixBootstrapperApplicationSymbol bootstrapperApplicationSymbol, string outputPath, Version windowsAssemblyVersion) 104 private static byte[] GenerateApplicationManifest(WixBundleSymbol bundleSymbol, WixBootstrapperApplicationDllSymbol bootstrapperApplicationSymbol, string outputPath, Version windowsAssemblyVersion)
105 { 105 {
106 const string asmv1Namespace = "urn:schemas-microsoft-com:asm.v1"; 106 const string asmv1Namespace = "urn:schemas-microsoft-com:asm.v1";
107 const string asmv3Namespace = "urn:schemas-microsoft-com:asm.v3"; 107 const string asmv3Namespace = "urn:schemas-microsoft-com:asm.v3";
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs b/src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs
index 3e54013a..0dd2ba15 100644
--- a/src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs
+++ b/src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs
@@ -14,11 +14,11 @@ namespace WixToolset.Core.Burn.Bundles
14 14
15 internal class CreateNonUXContainers 15 internal class CreateNonUXContainers
16 { 16 {
17 public CreateNonUXContainers(IBackendHelper backendHelper, IntermediateSection section, WixBootstrapperApplicationSymbol bootstrapperApplicationSymbol, Dictionary<string, WixBundlePayloadSymbol> payloadSymbols, string intermediateFolder, string layoutFolder, CompressionLevel? defaultCompressionLevel) 17 public CreateNonUXContainers(IBackendHelper backendHelper, IntermediateSection section, WixBootstrapperApplicationDllSymbol bootstrapperApplicationDllSymbol, Dictionary<string, WixBundlePayloadSymbol> payloadSymbols, string intermediateFolder, string layoutFolder, CompressionLevel? defaultCompressionLevel)
18 { 18 {
19 this.BackendHelper = backendHelper; 19 this.BackendHelper = backendHelper;
20 this.Section = section; 20 this.Section = section;
21 this.BootstrapperApplicationSymbol = bootstrapperApplicationSymbol; 21 this.BootstrapperApplicationDllSymbol = bootstrapperApplicationDllSymbol;
22 this.PayloadSymbols = payloadSymbols; 22 this.PayloadSymbols = payloadSymbols;
23 this.IntermediateFolder = intermediateFolder; 23 this.IntermediateFolder = intermediateFolder;
24 this.LayoutFolder = layoutFolder; 24 this.LayoutFolder = layoutFolder;
@@ -39,7 +39,7 @@ namespace WixToolset.Core.Burn.Bundles
39 39
40 private IntermediateSection Section { get; } 40 private IntermediateSection Section { get; }
41 41
42 private WixBootstrapperApplicationSymbol BootstrapperApplicationSymbol { get; } 42 private WixBootstrapperApplicationDllSymbol BootstrapperApplicationDllSymbol { get; }
43 43
44 private Dictionary<string, WixBundlePayloadSymbol> PayloadSymbols { get; } 44 private Dictionary<string, WixBundlePayloadSymbol> PayloadSymbols { get; }
45 45
@@ -81,9 +81,9 @@ namespace WixToolset.Core.Burn.Bundles
81 container.WorkingPath = Path.Combine(this.IntermediateFolder, container.Name); 81 container.WorkingPath = Path.Combine(this.IntermediateFolder, container.Name);
82 container.AttachedContainerIndex = 0; 82 container.AttachedContainerIndex = 0;
83 83
84 // Gather the list of UX payloads but ensure the BootstrapperApplication Payload is the first 84 // Gather the list of UX payloads but ensure the BootstrapperApplicationDll Payload is the first
85 // in the list since that is the Payload that Burn attempts to load. 85 // in the list since that is the Payload that Burn attempts to load.
86 var baPayloadId = this.BootstrapperApplicationSymbol.Id.Id; 86 var baPayloadId = this.BootstrapperApplicationDllSymbol.Id.Id;
87 87
88 foreach (var uxPayload in containerPayloads) 88 foreach (var uxPayload in containerPayloads)
89 { 89 {
diff --git a/src/WixToolset.Core/Compiler_Bundle.cs b/src/WixToolset.Core/Compiler_Bundle.cs
index 68b738fb..00f88c1f 100644
--- a/src/WixToolset.Core/Compiler_Bundle.cs
+++ b/src/WixToolset.Core/Compiler_Bundle.cs
@@ -647,18 +647,73 @@ namespace WixToolset.Core
647 private void ParseBootstrapperApplicationElement(XElement node) 647 private void ParseBootstrapperApplicationElement(XElement node)
648 { 648 {
649 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 649 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
650 Identifier id = null;
650 Identifier previousId = null; 651 Identifier previousId = null;
651 var previousType = ComplexReferenceChildType.Unknown; 652 var previousType = ComplexReferenceChildType.Unknown;
652 var dpiAwareness = WixBootstrapperApplicationDpiAwarenessType.PerMonitorV2;
653 653
654 // The BootstrapperApplication element acts like a Payload element so delegate to the "Payload" attribute parsing code to parse and create a Payload entry. 654 foreach (var attrib in node.Attributes())
655 var hasSourceFile = this.ParsePayloadElementContent(node, ComplexReferenceParentType.Container, Compiler.BurnUXContainerId, previousType, previousId, false, out var id);
656 if (hasSourceFile)
657 { 655 {
658 previousId = id; 656 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || CompilerCore.WixNamespace == attrib.Name.Namespace)
659 previousType = ComplexReferenceChildType.Payload; 657 {
658 switch (attrib.Name.LocalName)
659 {
660 case "Id":
661 id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib);
662 break;
663 default:
664 this.Core.UnexpectedAttribute(node, attrib);
665 break;
666 }
667 }
660 } 668 }
661 669
670 foreach (var child in node.Elements())
671 {
672 if (CompilerCore.WixNamespace == child.Name.Namespace)
673 {
674 switch (child.Name.LocalName)
675 {
676 case "BootstrapperApplicationDll":
677 previousId = this.ParseBootstrapperApplicationDllElement(child, previousType, previousId);
678 previousType = ComplexReferenceChildType.Payload;
679 break;
680 case "Payload":
681 previousId = this.ParsePayloadElement(child, ComplexReferenceParentType.Container, Compiler.BurnUXContainerId, previousType, previousId);
682 previousType = ComplexReferenceChildType.Payload;
683 break;
684 case "PayloadGroupRef":
685 previousId = this.ParsePayloadGroupRefElement(child, ComplexReferenceParentType.Container, Compiler.BurnUXContainerId, previousType, previousId);
686 previousType = ComplexReferenceChildType.PayloadGroup;
687 break;
688 default:
689 this.Core.UnexpectedElement(node, child);
690 break;
691 }
692 }
693 else
694 {
695 this.Core.ParseExtensionElement(node, child);
696 }
697 }
698
699 if (id != null)
700 {
701 this.Core.AddSymbol(new WixBootstrapperApplicationSymbol(sourceLineNumbers, id));
702 }
703 }
704
705 /// <summary>
706 /// Parse the BoostrapperApplication element.
707 /// </summary>
708 /// <param name="node">Element to parse</param>
709 private Identifier ParseBootstrapperApplicationDllElement(XElement node, ComplexReferenceChildType previousType, Identifier previousId)
710 {
711 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
712 var dpiAwareness = WixBootstrapperApplicationDpiAwarenessType.PerMonitorV2;
713
714 // The BootstrapperApplicationDll element acts like a Payload element so delegate to the "Payload" attribute parsing code to parse and create a Payload entry.
715 this.ParsePayloadElementContent(node, ComplexReferenceParentType.Container, Compiler.BurnUXContainerId, previousType, previousId, true, out var id);
716
662 foreach (var attrib in node.Attributes()) 717 foreach (var attrib in node.Attributes())
663 { 718 {
664 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || CompilerCore.WixNamespace == attrib.Name.Namespace) 719 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || CompilerCore.WixNamespace == attrib.Name.Namespace)
@@ -699,17 +754,9 @@ namespace WixToolset.Core
699 { 754 {
700 switch (child.Name.LocalName) 755 switch (child.Name.LocalName)
701 { 756 {
702 case "Payload": 757 default:
703 previousId = this.ParsePayloadElement(child, ComplexReferenceParentType.Container, Compiler.BurnUXContainerId, previousType, previousId); 758 this.Core.UnexpectedElement(node, child);
704 previousType = ComplexReferenceChildType.Payload; 759 break;
705 break;
706 case "PayloadGroupRef":
707 previousId = this.ParsePayloadGroupRefElement(child, ComplexReferenceParentType.Container, Compiler.BurnUXContainerId, previousType, previousId);
708 previousType = ComplexReferenceChildType.PayloadGroup;
709 break;
710 default:
711 this.Core.UnexpectedElement(node, child);
712 break;
713 } 760 }
714 } 761 }
715 else 762 else
@@ -718,15 +765,6 @@ namespace WixToolset.Core
718 } 765 }
719 } 766 }
720 767
721 if (null == previousId)
722 {
723 // We need *either* <Payload> or <PayloadGroupRef> or even just @SourceFile on the BA...
724 // but we just say there's a missing <Payload>.
725 // TODO: Is there a better message for this?
726 this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "Payload"));
727 }
728
729 // Add the application as an attached container and if a SourceFile was provided add the Id as the BA.
730 if (!this.Core.EncounteredError) 768 if (!this.Core.EncounteredError)
731 { 769 {
732 this.Core.AddSymbol(new WixBundleContainerSymbol(sourceLineNumbers, Compiler.BurnUXContainerId) 770 this.Core.AddSymbol(new WixBundleContainerSymbol(sourceLineNumbers, Compiler.BurnUXContainerId)
@@ -735,14 +773,13 @@ namespace WixToolset.Core
735 Type = ContainerType.Attached 773 Type = ContainerType.Attached
736 }); 774 });
737 775
738 if (hasSourceFile) 776 this.Core.AddSymbol(new WixBootstrapperApplicationDllSymbol(sourceLineNumbers, id)
739 { 777 {
740 this.Core.AddSymbol(new WixBootstrapperApplicationSymbol(sourceLineNumbers, id) 778 DpiAwareness = dpiAwareness,
741 { 779 });
742 DpiAwareness = dpiAwareness,
743 });
744 }
745 } 780 }
781
782 return id;
746 } 783 }
747 784
748 /// <summary> 785 /// <summary>
diff --git a/src/test/Example.Extension/Data/example.wxs b/src/test/Example.Extension/Data/example.wxs
index cd17d478..af5d5086 100644
--- a/src/test/Example.Extension/Data/example.wxs
+++ b/src/test/Example.Extension/Data/example.wxs
@@ -1,4 +1,3 @@
1<?xml version='1.0'?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> 1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 <Fragment> 2 <Fragment>
4 <Property Id="PropertyFromExampleWir" Value="FromWir" /> 3 <Property Id="PropertyFromExampleWir" Value="FromWir" />
@@ -6,7 +5,9 @@
6 <Binary Id="BinFromWir" SourceFile="example.txt" /> 5 <Binary Id="BinFromWir" SourceFile="example.txt" />
7 </Fragment> 6 </Fragment>
8 <Fragment> 7 <Fragment>
9 <BootstrapperApplication Id="fakeba" SourceFile="example.txt" /> 8 <BootstrapperApplication Id="fakeba">
9 <BootstrapperApplicationDll SourceFile="example.txt" />
10 </BootstrapperApplication>
10 </Fragment> 11 </Fragment>
11 <Fragment> 12 <Fragment>
12 <BundleExtension Id="ExampleBundleExtension" SourceFile="example.txt" /> 13 <BundleExtension Id="ExampleBundleExtension" SourceFile="example.txt" />
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/BundleWithPackageGroupRef/Bundle.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/BundleWithPackageGroupRef/Bundle.wxs
index 207a8de1..e738b407 100644
--- a/src/test/WixToolsetTest.CoreIntegration/TestData/BundleWithPackageGroupRef/Bundle.wxs
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/BundleWithPackageGroupRef/Bundle.wxs
@@ -1,7 +1,8 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> 1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 <Bundle Name="BurnBundle" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="B94478B1-E1F3-4700-9CE8-6AA090854AEC"> 2 <Bundle Name="BurnBundle" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="B94478B1-E1F3-4700-9CE8-6AA090854AEC">
4 <BootstrapperApplication SourceFile="fakeba.dll" /> 3 <BootstrapperApplication>
4 <BootstrapperApplicationDll SourceFile="fakeba.dll" />
5 </BootstrapperApplication>
5 <Chain> 6 <Chain>
6 <PackageGroupRef Id="BundlePackages" /> 7 <PackageGroupRef Id="BundlePackages" />
7 </Chain> 8 </Chain>
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/Bundle.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/Bundle.wxs
index 7ef1fc05..21749c07 100644
--- a/src/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/Bundle.wxs
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/Bundle.wxs
@@ -1,11 +1,12 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> 1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 <Bundle Name="!(loc.BundleName)" Version="!(bind.packageVersion.test.msi)" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"> 2 <Bundle Name="!(loc.BundleName)" Version="!(bind.packageVersion.test.msi)" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a">
4 <BootstrapperApplication SourceFile="fakeba.dll" /> 3 <BootstrapperApplication>
5 <Chain> 4 <BootstrapperApplicationDll SourceFile="fakeba.dll" />
6 <MsiPackage SourceFile="test.msi"> 5 </BootstrapperApplication>
7 <MsiProperty Name="TEST" Value="1" /> 6 <Chain>
8 </MsiPackage> 7 <MsiPackage SourceFile="test.msi">
9 </Chain> 8 <MsiProperty Name="TEST" Value="1" />
9 </MsiPackage>
10 </Chain>
10 </Bundle> 11 </Bundle>
11</Wix> 12</Wix>
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/MultiFileBootstrapperApplication.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/MultiFileBootstrapperApplication.wxs
index 88c4cf1b..f5fe9885 100644
--- a/src/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/MultiFileBootstrapperApplication.wxs
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/MultiFileBootstrapperApplication.wxs
@@ -1,6 +1,7 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> 1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 <Fragment> 2 <Fragment>
4 <BootstrapperApplication Id="fakeba" SourceFile="fakeba.dll" /> 3 <BootstrapperApplication Id="fakeba">
4 <BootstrapperApplicationDll SourceFile="fakeba.dll" />
5 </BootstrapperApplication>
5 </Fragment> 6 </Fragment>
6</Wix> 7</Wix>