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> | ||