diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-04-25 15:36:31 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-04-25 23:06:35 -0500 |
| commit | b4210b23ea28e0acc5a8b7ca5357d7d3926071b4 (patch) | |
| tree | 89f476f9469682691e771cf204e04f007d6cfebd /src | |
| parent | 8b7545c2b692098957cc5737e92415bbe4f7823d (diff) | |
| download | wix-b4210b23ea28e0acc5a8b7ca5357d7d3926071b4.tar.gz wix-b4210b23ea28e0acc5a8b7ca5357d7d3926071b4.tar.bz2 wix-b4210b23ea28e0acc5a8b7ca5357d7d3926071b4.zip | |
Allow DownloadUrl on embedded payloads.
#5253
Diffstat (limited to 'src')
8 files changed, 110 insertions, 58 deletions
diff --git a/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs b/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs index deab4d78..4a4f06f3 100644 --- a/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs +++ b/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs | |||
| @@ -300,7 +300,7 @@ namespace WixToolset.Core.Burn | |||
| 300 | 300 | ||
| 301 | if (PackagingType.Embedded == payload.Packaging && String.IsNullOrEmpty(payload.EmbeddedId)) | 301 | if (PackagingType.Embedded == payload.Packaging && String.IsNullOrEmpty(payload.EmbeddedId)) |
| 302 | { | 302 | { |
| 303 | payload.EmbeddedId = String.Format(CultureInfo.InvariantCulture, BurnCommon.BurnAttachedContainerEmbeddedIdFormat, payloadIndex); | 303 | payload.EmbeddedId = String.Format(CultureInfo.InvariantCulture, BurnCommon.BurnAuthoredContainerEmbeddedIdFormat, payloadIndex); |
| 304 | ++payloadIndex; | 304 | ++payloadIndex; |
| 305 | } | 305 | } |
| 306 | } | 306 | } |
diff --git a/src/WixToolset.Core.Burn/Bind/ResolveDownloadUrlsCommand.cs b/src/WixToolset.Core.Burn/Bind/ResolveDownloadUrlsCommand.cs index e41c1058..c678b114 100644 --- a/src/WixToolset.Core.Burn/Bind/ResolveDownloadUrlsCommand.cs +++ b/src/WixToolset.Core.Burn/Bind/ResolveDownloadUrlsCommand.cs | |||
| @@ -5,6 +5,7 @@ namespace WixToolset.Core.Burn.Bind | |||
| 5 | using System; | 5 | using System; |
| 6 | using System.Collections.Generic; | 6 | using System.Collections.Generic; |
| 7 | using WixToolset.Data; | 7 | using WixToolset.Data; |
| 8 | using WixToolset.Data.Burn; | ||
| 8 | using WixToolset.Data.Symbols; | 9 | using WixToolset.Data.Symbols; |
| 9 | using WixToolset.Extensibility; | 10 | using WixToolset.Extensibility; |
| 10 | using WixToolset.Extensibility.Services; | 11 | using WixToolset.Extensibility.Services; |
| @@ -60,7 +61,14 @@ namespace WixToolset.Core.Burn.Bind | |||
| 60 | { | 61 | { |
| 61 | foreach (var payload in this.PayloadsById.Values) | 62 | foreach (var payload in this.PayloadsById.Values) |
| 62 | { | 63 | { |
| 63 | if (payload.Packaging == PackagingType.External) | 64 | if (payload.Packaging == PackagingType.Embedded && payload.ContainerRef == BurnConstants.BurnUXContainerName) |
| 65 | { | ||
| 66 | if (!String.IsNullOrEmpty(payload.DownloadUrl)) | ||
| 67 | { | ||
| 68 | this.Messaging.Write(WarningMessages.DownloadUrlNotSupportedForBAPayloads(payload.SourceLineNumbers, payload.Id.Id)); | ||
| 69 | } | ||
| 70 | } | ||
| 71 | else | ||
| 64 | { | 72 | { |
| 65 | var packageId = payload.ParentPackagePayloadRef; | 73 | var packageId = payload.ParentPackagePayloadRef; |
| 66 | var parentUrl = payload.ParentPackagePayloadRef == null ? null : this.PayloadsById[payload.ParentPackagePayloadRef].DownloadUrl; | 74 | var parentUrl = payload.ParentPackagePayloadRef == null ? null : this.PayloadsById[payload.ParentPackagePayloadRef].DownloadUrl; |
| @@ -70,13 +78,6 @@ namespace WixToolset.Core.Burn.Bind | |||
| 70 | payload.DownloadUrl = resolvedUrl; | 78 | payload.DownloadUrl = resolvedUrl; |
| 71 | } | 79 | } |
| 72 | } | 80 | } |
| 73 | else if (payload.Packaging == PackagingType.Embedded) | ||
| 74 | { | ||
| 75 | if (!String.IsNullOrEmpty(payload.DownloadUrl)) | ||
| 76 | { | ||
| 77 | this.Messaging.Write(WarningMessages.DownloadUrlNotSupportedForEmbeddedPayloads(payload.SourceLineNumbers, payload.Id.Id)); | ||
| 78 | } | ||
| 79 | } | ||
| 80 | } | 81 | } |
| 81 | } | 82 | } |
| 82 | 83 | ||
diff --git a/src/WixToolset.Core.Burn/Bundles/BurnCommon.cs b/src/WixToolset.Core.Burn/Bundles/BurnCommon.cs index ab3b7896..1eb3563a 100644 --- a/src/WixToolset.Core.Burn/Bundles/BurnCommon.cs +++ b/src/WixToolset.Core.Burn/Bundles/BurnCommon.cs | |||
| @@ -19,8 +19,7 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 19 | { | 19 | { |
| 20 | public const string BurnNamespace = "http://wixtoolset.org/schemas/v4/2008/Burn"; | 20 | public const string BurnNamespace = "http://wixtoolset.org/schemas/v4/2008/Burn"; |
| 21 | public const string BurnUXContainerEmbeddedIdFormat = "u{0}"; | 21 | public const string BurnUXContainerEmbeddedIdFormat = "u{0}"; |
| 22 | public const string BurnUXContainerPayloadIdFormat = "p{0}"; | 22 | public const string BurnAuthoredContainerEmbeddedIdFormat = "a{0}"; |
| 23 | public const string BurnAttachedContainerEmbeddedIdFormat = "a{0}"; | ||
| 24 | 23 | ||
| 25 | public const string BADataFileName = "BootstrapperApplicationData.xml"; | 24 | public const string BADataFileName = "BootstrapperApplicationData.xml"; |
| 26 | public const string BADataNamespace = "http://wixtoolset.org/schemas/v4/BootstrapperApplicationData"; | 25 | public const string BADataNamespace = "http://wixtoolset.org/schemas/v4/BootstrapperApplicationData"; |
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs index db09b540..5655d23d 100644 --- a/src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs +++ b/src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs | |||
| @@ -166,9 +166,7 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 166 | // write the UX allPayloads... | 166 | // write the UX allPayloads... |
| 167 | foreach (var payload in this.UXContainerPayloads) | 167 | foreach (var payload in this.UXContainerPayloads) |
| 168 | { | 168 | { |
| 169 | writer.WriteStartElement("Payload"); | 169 | this.WriteBurnManifestUXPayload(writer, payload); |
| 170 | this.WriteBurnManifestPayloadAttributes(writer, payload, true, this.Payloads); | ||
| 171 | writer.WriteEndElement(); | ||
| 172 | } | 170 | } |
| 173 | 171 | ||
| 174 | writer.WriteEndElement(); // </UX> | 172 | writer.WriteEndElement(); // </UX> |
| @@ -183,20 +181,9 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 183 | } | 181 | } |
| 184 | } | 182 | } |
| 185 | 183 | ||
| 186 | foreach (var payload in this.Payloads.Values) | 184 | foreach (var payload in this.Payloads.Values.Where(p => p.ContainerRef != BurnConstants.BurnUXContainerName)) |
| 187 | { | 185 | { |
| 188 | if (PackagingType.Embedded == payload.Packaging && BurnConstants.BurnUXContainerName != payload.ContainerRef) | 186 | this.WriteBurnManifestPayload(writer, payload); |
| 189 | { | ||
| 190 | writer.WriteStartElement("Payload"); | ||
| 191 | this.WriteBurnManifestPayloadAttributes(writer, payload, true, this.Payloads); | ||
| 192 | writer.WriteEndElement(); | ||
| 193 | } | ||
| 194 | else if (PackagingType.External == payload.Packaging) | ||
| 195 | { | ||
| 196 | writer.WriteStartElement("Payload"); | ||
| 197 | this.WriteBurnManifestPayloadAttributes(writer, payload, false, this.Payloads); | ||
| 198 | writer.WriteEndElement(); | ||
| 199 | } | ||
| 200 | } | 187 | } |
| 201 | 188 | ||
| 202 | foreach (var rollbackBoundary in this.RollbackBoundaries) | 189 | foreach (var rollbackBoundary in this.RollbackBoundaries) |
| @@ -654,9 +641,9 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 654 | } | 641 | } |
| 655 | } | 642 | } |
| 656 | 643 | ||
| 657 | private void WriteBurnManifestPayloadAttributes(XmlTextWriter writer, WixBundlePayloadSymbol payload, bool embeddedOnly, Dictionary<string, WixBundlePayloadSymbol> allPayloads) | 644 | private void WriteBurnManifestPayload(XmlTextWriter writer, WixBundlePayloadSymbol payload) |
| 658 | { | 645 | { |
| 659 | Debug.Assert(!embeddedOnly || PackagingType.Embedded == payload.Packaging); | 646 | writer.WriteStartElement("Payload"); |
| 660 | 647 | ||
| 661 | writer.WriteAttributeString("Id", payload.Id.Id); | 648 | writer.WriteAttributeString("Id", payload.Id.Id); |
| 662 | writer.WriteAttributeString("FilePath", payload.Name); | 649 | writer.WriteAttributeString("FilePath", payload.Name); |
| @@ -668,28 +655,46 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 668 | writer.WriteAttributeString("LayoutOnly", "yes"); | 655 | writer.WriteAttributeString("LayoutOnly", "yes"); |
| 669 | } | 656 | } |
| 670 | 657 | ||
| 658 | if (!String.IsNullOrEmpty(payload.DownloadUrl)) | ||
| 659 | { | ||
| 660 | writer.WriteAttributeString("DownloadUrl", payload.DownloadUrl); | ||
| 661 | } | ||
| 662 | |||
| 671 | switch (payload.Packaging) | 663 | switch (payload.Packaging) |
| 672 | { | 664 | { |
| 673 | case PackagingType.Embedded: // this means it's in a container. | 665 | case PackagingType.Embedded: // this means it's in a container. |
| 666 | Debug.Assert(BurnConstants.BurnUXContainerName != payload.ContainerRef); | ||
| 667 | |||
| 674 | writer.WriteAttributeString("Packaging", "embedded"); | 668 | writer.WriteAttributeString("Packaging", "embedded"); |
| 675 | writer.WriteAttributeString("SourcePath", payload.EmbeddedId); | 669 | writer.WriteAttributeString("SourcePath", payload.EmbeddedId); |
| 676 | 670 | writer.WriteAttributeString("Container", payload.ContainerRef); | |
| 677 | if (BurnConstants.BurnUXContainerName != payload.ContainerRef) | ||
| 678 | { | ||
| 679 | writer.WriteAttributeString("Container", payload.ContainerRef); | ||
| 680 | } | ||
| 681 | break; | 671 | break; |
| 682 | 672 | ||
| 683 | case PackagingType.External: | 673 | case PackagingType.External: |
| 684 | if (!String.IsNullOrEmpty(payload.DownloadUrl)) | ||
| 685 | { | ||
| 686 | writer.WriteAttributeString("DownloadUrl", payload.DownloadUrl); | ||
| 687 | } | ||
| 688 | |||
| 689 | writer.WriteAttributeString("Packaging", "external"); | 674 | writer.WriteAttributeString("Packaging", "external"); |
| 690 | writer.WriteAttributeString("SourcePath", payload.Name); | 675 | writer.WriteAttributeString("SourcePath", payload.Name); |
| 691 | break; | 676 | break; |
| 692 | } | 677 | } |
| 678 | |||
| 679 | writer.WriteEndElement(); | ||
| 680 | } | ||
| 681 | |||
| 682 | private void WriteBurnManifestUXPayload(XmlTextWriter writer, WixBundlePayloadSymbol payload) | ||
| 683 | { | ||
| 684 | Debug.Assert(PackagingType.Embedded == payload.Packaging); | ||
| 685 | Debug.Assert(BurnConstants.BurnUXContainerName == payload.ContainerRef); | ||
| 686 | |||
| 687 | writer.WriteStartElement("Payload"); | ||
| 688 | |||
| 689 | // TODO: The engine should be updated to not require FileSize, Hash, or Packaging for UX payloads since the values are never used. | ||
| 690 | writer.WriteAttributeString("Id", payload.Id.Id); | ||
| 691 | writer.WriteAttributeString("FilePath", payload.Name); | ||
| 692 | writer.WriteAttributeString("FileSize", payload.FileSize.Value.ToString(CultureInfo.InvariantCulture)); | ||
| 693 | writer.WriteAttributeString("Hash", payload.Hash); | ||
| 694 | writer.WriteAttributeString("Packaging", "embedded"); | ||
| 695 | writer.WriteAttributeString("SourcePath", payload.EmbeddedId); | ||
| 696 | |||
| 697 | writer.WriteEndElement(); | ||
| 693 | } | 698 | } |
| 694 | } | 699 | } |
| 695 | } | 700 | } |
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateContainerCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateContainerCommand.cs index 8f361626..87a63cc3 100644 --- a/src/WixToolset.Core.Burn/Bundles/CreateContainerCommand.cs +++ b/src/WixToolset.Core.Burn/Bundles/CreateContainerCommand.cs | |||
| @@ -44,13 +44,6 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 44 | 44 | ||
| 45 | public void Execute() | 45 | public void Execute() |
| 46 | { | 46 | { |
| 47 | var payloadCount = this.Payloads.Count(); // The number of embedded payloads | ||
| 48 | |||
| 49 | if (!String.IsNullOrEmpty(this.ManifestFile)) | ||
| 50 | { | ||
| 51 | ++payloadCount; | ||
| 52 | } | ||
| 53 | |||
| 54 | var cabinetPath = Path.GetFullPath(this.OutputPath); | 47 | var cabinetPath = Path.GetFullPath(this.OutputPath); |
| 55 | 48 | ||
| 56 | var files = new List<CabinetCompressFile>(); | 49 | var files = new List<CabinetCompressFile>(); |
diff --git a/src/WixToolset.Core/Compile/CompilerPayload.cs b/src/WixToolset.Core/Compile/CompilerPayload.cs index 4c7e843d..3f423034 100644 --- a/src/WixToolset.Core/Compile/CompilerPayload.cs +++ b/src/WixToolset.Core/Compile/CompilerPayload.cs | |||
| @@ -15,8 +15,6 @@ namespace WixToolset.Core | |||
| 15 | 15 | ||
| 16 | public string Description { get; set; } | 16 | public string Description { get; set; } |
| 17 | 17 | ||
| 18 | public string DisplayName { get; set; } | ||
| 19 | |||
| 20 | public string DownloadUrl { get; set; } | 18 | public string DownloadUrl { get; set; } |
| 21 | 19 | ||
| 22 | public string Hash { get; set; } | 20 | public string Hash { get; set; } |
| @@ -158,7 +156,7 @@ namespace WixToolset.Core | |||
| 158 | 156 | ||
| 159 | if (!String.IsNullOrEmpty(this.DownloadUrl)) | 157 | if (!String.IsNullOrEmpty(this.DownloadUrl)) |
| 160 | { | 158 | { |
| 161 | this.Core.Write(WarningMessages.DownloadUrlNotSupportedForEmbeddedPayloads(this.SourceLineNumbers, this.Id.Id)); | 159 | this.Core.Write(WarningMessages.DownloadUrlNotSupportedForBAPayloads(this.SourceLineNumbers, this.Id.Id)); |
| 162 | } | 160 | } |
| 163 | 161 | ||
| 164 | this.Compressed = YesNoDefaultType.Yes; | 162 | this.Compressed = YesNoDefaultType.Yes; |
| @@ -174,7 +172,7 @@ namespace WixToolset.Core | |||
| 174 | DownloadUrl = this.DownloadUrl, | 172 | DownloadUrl = this.DownloadUrl, |
| 175 | Compressed = (this.Compressed == YesNoDefaultType.Yes) ? true : (this.Compressed == YesNoDefaultType.No) ? (bool?)false : null, | 173 | Compressed = (this.Compressed == YesNoDefaultType.Yes) ? true : (this.Compressed == YesNoDefaultType.No) ? (bool?)false : null, |
| 176 | UnresolvedSourceFile = this.SourceFile, // duplicate of sourceFile but in a string column so it won't get resolved to a full path during binding. | 174 | UnresolvedSourceFile = this.SourceFile, // duplicate of sourceFile but in a string column so it won't get resolved to a full path during binding. |
| 177 | DisplayName = this.DisplayName ?? this.ProductName, | 175 | DisplayName = this.ProductName, |
| 178 | Description = this.Description, | 176 | Description = this.Description, |
| 179 | Hash = this.Hash, | 177 | Hash = this.Hash, |
| 180 | FileSize = this.Size, | 178 | FileSize = this.Size, |
| @@ -245,11 +243,6 @@ namespace WixToolset.Core | |||
| 245 | this.Description = this.Core.GetAttributeValue(this.SourceLineNumbers, attrib); | 243 | this.Description = this.Core.GetAttributeValue(this.SourceLineNumbers, attrib); |
| 246 | } | 244 | } |
| 247 | 245 | ||
| 248 | public void ParseDisplayName(XAttribute attrib) | ||
| 249 | { | ||
| 250 | this.DisplayName = this.Core.GetAttributeValue(this.SourceLineNumbers, attrib); | ||
| 251 | } | ||
| 252 | |||
| 253 | public void ParseDownloadUrl(XAttribute attrib) | 246 | public void ParseDownloadUrl(XAttribute attrib) |
| 254 | { | 247 | { |
| 255 | this.DownloadUrl = this.Core.GetAttributeValue(this.SourceLineNumbers, attrib); | 248 | this.DownloadUrl = this.Core.GetAttributeValue(this.SourceLineNumbers, attrib); |
diff --git a/src/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs b/src/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs index ff48ee05..dd381dfe 100644 --- a/src/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs | |||
| @@ -15,6 +15,50 @@ namespace WixToolsetTest.CoreIntegration | |||
| 15 | 15 | ||
| 16 | public class ContainerFixture | 16 | public class ContainerFixture |
| 17 | { | 17 | { |
| 18 | [Fact(Skip = "Test demonstrates failure")] | ||
| 19 | public void CanBuildWithCustomAttachedContainer() | ||
| 20 | { | ||
| 21 | var folder = TestData.Get(@"TestData"); | ||
| 22 | |||
| 23 | using (var fs = new DisposableFileSystem()) | ||
| 24 | { | ||
| 25 | var baseFolder = fs.GetFolder(); | ||
| 26 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
| 27 | var binFolder = Path.Combine(baseFolder, "bin"); | ||
| 28 | var bundlePath = Path.Combine(binFolder, "test.exe"); | ||
| 29 | var baFolderPath = Path.Combine(baseFolder, "ba"); | ||
| 30 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | ||
| 31 | |||
| 32 | this.BuildMsis(folder, intermediateFolder, binFolder, buildToSubfolder: true); | ||
| 33 | |||
| 34 | var result = WixRunner.Execute(new[] | ||
| 35 | { | ||
| 36 | "build", | ||
| 37 | Path.Combine(folder, "Container", "HarvestIntoAttachedContainer.wxs"), | ||
| 38 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
| 39 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
| 40 | "-bindpath", binFolder, | ||
| 41 | "-intermediateFolder", intermediateFolder, | ||
| 42 | "-o", bundlePath | ||
| 43 | }); | ||
| 44 | |||
| 45 | result.AssertSuccess(); | ||
| 46 | |||
| 47 | Assert.True(File.Exists(bundlePath)); | ||
| 48 | |||
| 49 | var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); | ||
| 50 | extractResult.AssertSuccess(); | ||
| 51 | |||
| 52 | var payloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload"); | ||
| 53 | Assert.Equal(4, payloads.Count); | ||
| 54 | var ignoreAttributes = new Dictionary<string, List<string>> { { "Payload", new List<string> { "FileSize", "Hash" } } }; | ||
| 55 | Assert.Equal(@"<Payload Id='FirstX64' FilePath='FirstX64\FirstX64.msi' FileSize='*' Hash='*' DownloadUrl='http://example.com//FirstX64/FirstX64/FirstX64.msi' Packaging='embedded' SourcePath='a0' Container='BundlePackages' />", payloads[0].GetTestXml(ignoreAttributes)); | ||
| 56 | Assert.Equal(@"<Payload Id='FirstX86.msi' FilePath='FirstX86\FirstX86.msi' FileSize='*' Hash='*' DownloadUrl='http://example.com//FirstX86.msi/FirstX86/FirstX86.msi' Packaging='embedded' SourcePath='a1' Container='BundlePackages' />", payloads[1].GetTestXml(ignoreAttributes)); | ||
| 57 | Assert.Equal(@"<Payload Id='fk1m38Cf9RZ2Bx_ipinRY6BftelU' FilePath='FirstX86\PFiles\MsiPackage\test.txt' FileSize='*' Hash='*' DownloadUrl='http://example.com/FirstX86/fk1m38Cf9RZ2Bx_ipinRY6BftelU/FirstX86/PFiles/MsiPackage/test.txt' Packaging='embedded' SourcePath='a2' Container='BundlePackages' />", payloads[2].GetTestXml(ignoreAttributes)); | ||
| 58 | Assert.Equal(@"<Payload Id='ff2L_N_DLQ.nSUi.l8LxG14gd2V4' FilePath='FirstX64\PFiles\MsiPackage\test.txt' FileSize='*' Hash='*' DownloadUrl='http://example.com/FirstX64/ff2L_N_DLQ.nSUi.l8LxG14gd2V4/FirstX64/PFiles/MsiPackage/test.txt' Packaging='embedded' SourcePath='a3' Container='BundlePackages' />", payloads[3].GetTestXml(ignoreAttributes)); | ||
| 59 | } | ||
| 60 | } | ||
| 61 | |||
| 18 | [Fact] | 62 | [Fact] |
| 19 | public void HarvestedPayloadsArePutInCorrectContainer() | 63 | public void HarvestedPayloadsArePutInCorrectContainer() |
| 20 | { | 64 | { |
| @@ -309,7 +353,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 309 | } | 353 | } |
| 310 | } | 354 | } |
| 311 | 355 | ||
| 312 | private void BuildMsis(string folder, string intermediateFolder, string binFolder) | 356 | private void BuildMsis(string folder, string intermediateFolder, string binFolder, bool buildToSubfolder = false) |
| 313 | { | 357 | { |
| 314 | var result = WixRunner.Execute(new[] | 358 | var result = WixRunner.Execute(new[] |
| 315 | { | 359 | { |
| @@ -319,7 +363,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 319 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | 363 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), |
| 320 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | 364 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), |
| 321 | "-intermediateFolder", intermediateFolder, | 365 | "-intermediateFolder", intermediateFolder, |
| 322 | "-o", Path.Combine(binFolder, "FirstX86.msi"), | 366 | "-o", Path.Combine(binFolder, buildToSubfolder ? "FirstX86" : ".", "FirstX86.msi"), |
| 323 | }); | 367 | }); |
| 324 | 368 | ||
| 325 | result.AssertSuccess(); | 369 | result.AssertSuccess(); |
| @@ -332,7 +376,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 332 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | 376 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), |
| 333 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | 377 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), |
| 334 | "-intermediateFolder", intermediateFolder, | 378 | "-intermediateFolder", intermediateFolder, |
| 335 | "-o", Path.Combine(binFolder, "FirstX64.msi"), | 379 | "-o", Path.Combine(binFolder, buildToSubfolder ? "FirstX64" : ".", "FirstX64.msi"), |
| 336 | }); | 380 | }); |
| 337 | 381 | ||
| 338 | result.AssertSuccess(); | 382 | result.AssertSuccess(); |
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Container/HarvestIntoAttachedContainer.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/Container/HarvestIntoAttachedContainer.wxs new file mode 100644 index 00000000..ec757c5d --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Container/HarvestIntoAttachedContainer.wxs | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | ||
| 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
| 3 | <Fragment> | ||
| 4 | <PackageGroup Id="BundlePackages"> | ||
| 5 | <MsiPackage Id="FirstX86"> | ||
| 6 | <PayloadGroupRef Id="FirstX86Payloads" /> | ||
| 7 | </MsiPackage> | ||
| 8 | <MsiPackage Id="FirstX64" Name="FirstX64\FirstX64.msi" SourceFile="FirstX64\" DownloadUrl="http://example.com/{0}/{1}/{2}" /> | ||
| 9 | </PackageGroup> | ||
| 10 | <Container Id="BundlePackages" Type="attached"> | ||
| 11 | <PackageGroupRef Id="BundlePackages" /> | ||
| 12 | </Container> | ||
| 13 | <PayloadGroup Id="FirstX86Payloads"> | ||
| 14 | <MsiPackagePayload Name="FirstX86\FirstX86.msi" SourceFile="FirstX86\" DownloadUrl="http://example.com/{0}/{1}/{2}" /> | ||
| 15 | </PayloadGroup> | ||
| 16 | </Fragment> | ||
| 17 | </Wix> | ||
