aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2022-01-02 13:13:10 -0800
committerRob Mensching <rob@firegiant.com>2022-01-02 23:48:48 -0800
commit9e3d7c0c4c7000ef51c2959b4e04c2323d1dac31 (patch)
tree6f3ad75de6ad7efbfa2dcb31818ecf14ee07456c
parent770bf982da4a81e56ba4be2b6a7a3afa3868a535 (diff)
downloadwix-9e3d7c0c4c7000ef51c2959b4e04c2323d1dac31.tar.gz
wix-9e3d7c0c4c7000ef51c2959b4e04c2323d1dac31.tar.bz2
wix-9e3d7c0c4c7000ef51c2959b4e04c2323d1dac31.zip
Move to a single tracking file for all bind inputs and outputs
A single tracking file can be enhanced more easily than continuing to introduce specialized tracking files. In this case, we now include output files that are copied and can differentiate them from the built output files.
-rw-r--r--src/api/wix/WixToolset.Extensibility/Data/ILayoutContext.cs14
-rw-r--r--src/api/wix/WixToolset.Extensibility/Data/TrackedFileType.cs12
-rw-r--r--src/wix/WixToolset.BuildTasks/ReadTracking.cs97
-rw-r--r--src/wix/WixToolset.BuildTasks/WixBuild.cs10
-rw-r--r--src/wix/WixToolset.Core.Burn/Bind/BindBundleCommand.cs4
-rw-r--r--src/wix/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs4
-rw-r--r--src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs2
-rw-r--r--src/wix/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs2
-rw-r--r--src/wix/WixToolset.Core/CommandLine/BuildCommand.cs34
-rw-r--r--src/wix/WixToolset.Core/ExtensibilityServices/TrackedFile.cs2
-rw-r--r--src/wix/WixToolset.Core/LayoutContext.cs6
-rw-r--r--src/wix/WixToolset.Core/LayoutCreator.cs97
-rw-r--r--src/wix/WixToolset.Sdk/tools/wix.targets104
-rw-r--r--src/wix/test/WixToolsetTest.Sdk/WixToolsetTest.Sdk.csproj3
14 files changed, 185 insertions, 206 deletions
diff --git a/src/api/wix/WixToolset.Extensibility/Data/ILayoutContext.cs b/src/api/wix/WixToolset.Extensibility/Data/ILayoutContext.cs
index b11b4d13..981ed38e 100644
--- a/src/api/wix/WixToolset.Extensibility/Data/ILayoutContext.cs
+++ b/src/api/wix/WixToolset.Extensibility/Data/ILayoutContext.cs
@@ -32,24 +32,14 @@ namespace WixToolset.Extensibility.Data
32 IReadOnlyCollection<IFileTransfer> FileTransfers { get; set; } 32 IReadOnlyCollection<IFileTransfer> FileTransfers { get; set; }
33 33
34 /// <summary> 34 /// <summary>
35 /// File to capture list of content files.
36 /// </summary>
37 string ContentsFile { get; set; }
38
39 /// <summary>
40 /// File to capture list of output files.
41 /// </summary>
42 string OutputsFile { get; set; }
43
44 /// <summary>
45 /// Intermediate folder. 35 /// Intermediate folder.
46 /// </summary> 36 /// </summary>
47 string IntermediateFolder { get; set; } 37 string IntermediateFolder { get; set; }
48 38
49 /// <summary> 39 /// <summary>
50 /// List of built output files. 40 /// File to capture list of content, built output and copied output files.
51 /// </summary> 41 /// </summary>
52 string BuiltOutputsFile { get; set; } 42 string TrackingFile { get; set; }
53 43
54 /// <summary> 44 /// <summary>
55 /// Reset ACLs on file transfers. 45 /// Reset ACLs on file transfers.
diff --git a/src/api/wix/WixToolset.Extensibility/Data/TrackedFileType.cs b/src/api/wix/WixToolset.Extensibility/Data/TrackedFileType.cs
index e7f53842..904a990f 100644
--- a/src/api/wix/WixToolset.Extensibility/Data/TrackedFileType.cs
+++ b/src/api/wix/WixToolset.Extensibility/Data/TrackedFileType.cs
@@ -25,9 +25,15 @@ namespace WixToolset.Extensibility.Data
25 Intermediate, 25 Intermediate,
26 26
27 /// <summary> 27 /// <summary>
28 /// Final output (like a .msi, .cab or .wixpdb). 28 /// Output created by the build process itself (like a .msi, .cab or .wixpdb).
29 /// These are the whole point of the build process. 29 /// These files can be recreated in the final output location by building again.
30 /// </summary> 30 /// </summary>
31 Final, 31 BuiltOutput,
32
33 /// <summary>
34 /// Output copied by the build process (like external files in an .msi).
35 /// These files are not created by the build process but are copied to the final output location.
36 /// </summary>
37 CopiedOutput,
32 } 38 }
33} 39}
diff --git a/src/wix/WixToolset.BuildTasks/ReadTracking.cs b/src/wix/WixToolset.BuildTasks/ReadTracking.cs
new file mode 100644
index 00000000..1ce039f6
--- /dev/null
+++ b/src/wix/WixToolset.BuildTasks/ReadTracking.cs
@@ -0,0 +1,97 @@
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.BuildTasks
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Linq;
8 using Microsoft.Build.Framework;
9 using Microsoft.Build.Utilities;
10
11 /// <summary>
12 /// Read the contents of the tracking file produced by the build command.
13 /// </summary>
14 public class ReadTracking : Task
15 {
16 private const string TrackedTypeMetadataName = "TrackedType";
17 private static readonly char[] TrackedLineTypePathSeparator = new[] { '\t' };
18
19 /// <summary>
20 /// The path to the tracking file.
21 /// </summary>
22 [Required]
23 public ITaskItem File { get; set; }
24
25 /// <summary>
26 /// All tracked files.
27 /// </summary>
28 [Output]
29 public ITaskItem[] All { get; private set; }
30
31 /// <summary>
32 /// The tracked built outputs.
33 /// </summary>
34 [Output]
35 public ITaskItem[] BuiltOutputs { get; private set; }
36
37 /// <summary>
38 /// The tracked copied outputs.
39 /// </summary>
40 [Output]
41 public ITaskItem[] CopiedOutputs { get; private set; }
42
43 /// <summary>
44 /// The tracked inputs.
45 /// </summary>
46 [Output]
47 public ITaskItem[] Inputs { get; private set; }
48
49 /// <summary>
50 /// All tracked outputs.
51 /// </summary>
52 [Output]
53 public ITaskItem[] Outputs { get; private set; }
54
55 /// <summary>
56 /// Gets a complete list of external cabs referenced by the given installer database file.
57 /// </summary>
58 /// <returns>True upon completion of the task execution.</returns>
59 public override bool Execute()
60 {
61 var all = new List<ITaskItem>();
62 var path = this.File.ItemSpec;
63
64 if (System.IO.File.Exists(path))
65 {
66 var lines = System.IO.File.ReadAllLines(path);
67
68 foreach (var line in lines)
69 {
70 var split = line.Split(TrackedLineTypePathSeparator, 2, StringSplitOptions.RemoveEmptyEntries);
71
72 if (split.Length == 2)
73 {
74 all.Add(new TaskItem(split[1], new Dictionary<string, string>() { [TrackedTypeMetadataName] = split[0] }));
75 }
76 else
77 {
78 this.Log.LogError($"Failed to parse tracked line: {line}");
79 }
80 }
81 }
82
83 this.All = all.ToArray();
84 this.BuiltOutputs = all.Where(t => FilterByTrackedType(t, "BuiltOutput")).ToArray();
85 this.CopiedOutputs = all.Where(t => FilterByTrackedType(t, "CopiedOutput")).ToArray();
86 this.Inputs = all.Where(t => FilterByTrackedType(t, "Input")).ToArray();
87 this.Outputs = all.Where(t => FilterByTrackedType(t, "BuiltOutput") || FilterByTrackedType(t, "CopiedOutput")).ToArray();
88
89 return true;
90 }
91
92 private static bool FilterByTrackedType(ITaskItem item, string type)
93 {
94 return item.GetMetadata(TrackedTypeMetadataName).Equals(type, StringComparison.OrdinalIgnoreCase);
95 }
96 }
97}
diff --git a/src/wix/WixToolset.BuildTasks/WixBuild.cs b/src/wix/WixToolset.BuildTasks/WixBuild.cs
index dbff7e81..3d4617f6 100644
--- a/src/wix/WixToolset.BuildTasks/WixBuild.cs
+++ b/src/wix/WixToolset.BuildTasks/WixBuild.cs
@@ -52,11 +52,7 @@ namespace WixToolset.BuildTasks
52 52
53 public bool BindFiles { get; set; } 53 public bool BindFiles { get; set; }
54 54
55 public ITaskItem BindContentsFile { get; set; } 55 public ITaskItem BindTrackingFile { get; set; }
56
57 public ITaskItem BindOutputsFile { get; set; }
58
59 public ITaskItem BindBuiltOutputsFile { get; set; }
60 56
61 public string CabinetCachePath { get; set; } 57 public string CabinetCachePath { get; set; }
62 58
@@ -96,9 +92,7 @@ namespace WixToolset.BuildTasks
96 commandLineBuilder.AppendSwitchIfNotNull("-usf ", this.UnreferencedSymbolsFile); 92 commandLineBuilder.AppendSwitchIfNotNull("-usf ", this.UnreferencedSymbolsFile);
97 commandLineBuilder.AppendSwitchIfNotNull("-cc ", this.CabinetCachePath); 93 commandLineBuilder.AppendSwitchIfNotNull("-cc ", this.CabinetCachePath);
98 commandLineBuilder.AppendSwitchIfNotNull("-intermediatefolder ", this.IntermediateDirectory); 94 commandLineBuilder.AppendSwitchIfNotNull("-intermediatefolder ", this.IntermediateDirectory);
99 commandLineBuilder.AppendSwitchIfNotNull("-contentsfile ", this.BindContentsFile); 95 commandLineBuilder.AppendSwitchIfNotNull("-trackingfile ", this.BindTrackingFile);
100 commandLineBuilder.AppendSwitchIfNotNull("-outputsfile ", this.BindOutputsFile);
101 commandLineBuilder.AppendSwitchIfNotNull("-builtoutputsfile ", this.BindBuiltOutputsFile);
102 commandLineBuilder.AppendSwitchIfNotNull("-defaultcompressionlevel ", this.DefaultCompressionLevel); 96 commandLineBuilder.AppendSwitchIfNotNull("-defaultcompressionlevel ", this.DefaultCompressionLevel);
103 97
104 base.BuildCommandLine(commandLineBuilder); 98 base.BuildCommandLine(commandLineBuilder);
diff --git a/src/wix/WixToolset.Core.Burn/Bind/BindBundleCommand.cs b/src/wix/WixToolset.Core.Burn/Bind/BindBundleCommand.cs
index cd00232a..7b74ce5e 100644
--- a/src/wix/WixToolset.Core.Burn/Bind/BindBundleCommand.cs
+++ b/src/wix/WixToolset.Core.Burn/Bind/BindBundleCommand.cs
@@ -483,7 +483,7 @@ namespace WixToolset.Core.Burn
483 command.Execute(); 483 command.Execute();
484 484
485 fileTransfers.Add(command.Transfer); 485 fileTransfers.Add(command.Transfer);
486 trackedFiles.Add(this.BackendHelper.TrackFile(this.OutputPath, TrackedFileType.Final)); 486 trackedFiles.Add(this.BackendHelper.TrackFile(this.OutputPath, TrackedFileType.BuiltOutput));
487 } 487 }
488 488
489#if TODO // does this need to come back, or do they only need to be in TrackedFiles? 489#if TODO // does this need to come back, or do they only need to be in TrackedFiles?
@@ -504,7 +504,7 @@ namespace WixToolset.Core.Burn
504 } 504 }
505 else 505 else
506 { 506 {
507 var trackPdb = this.BackendHelper.TrackFile(this.OutputPdbPath, TrackedFileType.Final); 507 var trackPdb = this.BackendHelper.TrackFile(this.OutputPdbPath, TrackedFileType.BuiltOutput);
508 trackedFiles.Add(trackPdb); 508 trackedFiles.Add(trackPdb);
509 509
510 wixout = WixOutput.Create(trackPdb.Path); 510 wixout = WixOutput.Create(trackPdb.Path);
diff --git a/src/wix/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs b/src/wix/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
index 9f36cd78..f2a8b9c6 100644
--- a/src/wix/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
+++ b/src/wix/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
@@ -478,7 +478,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
478 { 478 {
479 this.Messaging.Write(VerboseMessages.GeneratingDatabase()); 479 this.Messaging.Write(VerboseMessages.GeneratingDatabase());
480 480
481 var trackMsi = this.WindowsInstallerBackendHelper.TrackFile(this.OutputPath, TrackedFileType.Final); 481 var trackMsi = this.WindowsInstallerBackendHelper.TrackFile(this.OutputPath, TrackedFileType.BuiltOutput);
482 trackedFiles.Add(trackMsi); 482 trackedFiles.Add(trackMsi);
483 483
484 var command = new GenerateDatabaseCommand(this.Messaging, this.WindowsInstallerBackendHelper, this.FileSystemManager, data, trackMsi.Path, tableDefinitions, this.IntermediateFolder, keepAddedColumns: false, this.SuppressAddingValidationRows, useSubdirectory: false); 484 var command = new GenerateDatabaseCommand(this.Messaging, this.WindowsInstallerBackendHelper, this.FileSystemManager, data, trackMsi.Path, tableDefinitions, this.IntermediateFolder, keepAddedColumns: false, this.SuppressAddingValidationRows, useSubdirectory: false);
@@ -595,7 +595,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
595 } 595 }
596 else 596 else
597 { 597 {
598 var trackPdb = this.WindowsInstallerBackendHelper.TrackFile(this.OutputPdbPath, TrackedFileType.Final); 598 var trackPdb = this.WindowsInstallerBackendHelper.TrackFile(this.OutputPdbPath, TrackedFileType.BuiltOutput);
599 trackedFiles.Add(trackPdb); 599 trackedFiles.Add(trackPdb);
600 600
601 wixout = WixOutput.Create(trackPdb.Path); 601 wixout = WixOutput.Create(trackPdb.Path);
diff --git a/src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs b/src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
index 83a4949e..4ac248cd 100644
--- a/src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
+++ b/src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
@@ -225,7 +225,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
225 } 225 }
226 else 226 else
227 { 227 {
228 var trackDestination = this.BackendHelper.TrackFile(Path.Combine(cabinetDir, mediaSymbol.Cabinet), TrackedFileType.Final, mediaSymbol.SourceLineNumbers); 228 var trackDestination = this.BackendHelper.TrackFile(Path.Combine(cabinetDir, mediaSymbol.Cabinet), TrackedFileType.BuiltOutput, mediaSymbol.SourceLineNumbers);
229 this.trackedFiles.Add(trackDestination); 229 this.trackedFiles.Add(trackDestination);
230 230
231 var transfer = this.BackendHelper.CreateFileTransfer(resolvedCabinet.Path, trackDestination.Path, resolvedCabinet.BuildOption == CabinetBuildOption.BuildAndMove, mediaSymbol.SourceLineNumbers); 231 var transfer = this.BackendHelper.CreateFileTransfer(resolvedCabinet.Path, trackDestination.Path, resolvedCabinet.BuildOption == CabinetBuildOption.BuildAndMove, mediaSymbol.SourceLineNumbers);
diff --git a/src/wix/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs b/src/wix/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs
index 039ba495..9aad3537 100644
--- a/src/wix/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs
+++ b/src/wix/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs
@@ -109,7 +109,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
109 // because if the source and destination of the transfer is the same, we 109 // because if the source and destination of the transfer is the same, we
110 // don't want to clean the file because we'd be deleting the original 110 // don't want to clean the file because we'd be deleting the original
111 // (and that would be bad). 111 // (and that would be bad).
112 var tracked = this.BackendHelper.TrackFile(transfer.Destination, TrackedFileType.Final, facade.SourceLineNumber); 112 var tracked = this.BackendHelper.TrackFile(transfer.Destination, TrackedFileType.BuiltOutput, facade.SourceLineNumber);
113 tracked.Clean = !transfer.Redundant; 113 tracked.Clean = !transfer.Redundant;
114 114
115 trackedFiles.Add(tracked); 115 trackedFiles.Add(tracked);
diff --git a/src/wix/WixToolset.Core/CommandLine/BuildCommand.cs b/src/wix/WixToolset.Core/CommandLine/BuildCommand.cs
index 5f618b81..47b7afa8 100644
--- a/src/wix/WixToolset.Core/CommandLine/BuildCommand.cs
+++ b/src/wix/WixToolset.Core/CommandLine/BuildCommand.cs
@@ -52,11 +52,7 @@ namespace WixToolset.Core.CommandLine
52 52
53 private CompressionLevel? DefaultCompressionLevel { get; set; } 53 private CompressionLevel? DefaultCompressionLevel { get; set; }
54 54
55 private string ContentsFile { get; set; } 55 private string TrackingFile { get; set; }
56
57 private string OutputsFile { get; set; }
58
59 private string BuiltOutputsFile { get; set; }
60 56
61 public Task<int> ExecuteAsync(CancellationToken cancellationToken) 57 public Task<int> ExecuteAsync(CancellationToken cancellationToken)
62 { 58 {
@@ -78,11 +74,7 @@ namespace WixToolset.Core.CommandLine
78 74
79 this.Platform = this.commandLine.Platform; 75 this.Platform = this.commandLine.Platform;
80 76
81 this.ContentsFile = this.commandLine.ContentsFile; 77 this.TrackingFile = this.commandLine.TrackingFile;
82
83 this.OutputsFile = this.commandLine.OutputsFile;
84
85 this.BuiltOutputsFile = this.commandLine.BuiltOutputsFile;
86 78
87 this.DefaultCompressionLevel = this.commandLine.DefaultCompressionLevel; 79 this.DefaultCompressionLevel = this.commandLine.DefaultCompressionLevel;
88 80
@@ -371,9 +363,7 @@ namespace WixToolset.Core.CommandLine
371 context.TrackedFiles = bindResult.TrackedFiles; 363 context.TrackedFiles = bindResult.TrackedFiles;
372 context.FileTransfers = bindResult.FileTransfers; 364 context.FileTransfers = bindResult.FileTransfers;
373 context.IntermediateFolder = intermediateFolder; 365 context.IntermediateFolder = intermediateFolder;
374 context.ContentsFile = this.ContentsFile; 366 context.TrackingFile = this.TrackingFile;
375 context.OutputsFile = this.OutputsFile;
376 context.BuiltOutputsFile = this.BuiltOutputsFile;
377 context.ResetAcls = this.commandLine.ResetAcls; 367 context.ResetAcls = this.commandLine.ResetAcls;
378 context.CancellationToken = cancellationToken; 368 context.CancellationToken = cancellationToken;
379 369
@@ -537,11 +527,7 @@ namespace WixToolset.Core.CommandLine
537 527
538 public CompressionLevel? DefaultCompressionLevel { get; private set; } 528 public CompressionLevel? DefaultCompressionLevel { get; private set; }
539 529
540 public string ContentsFile { get; private set; } 530 public string TrackingFile { get; private set; }
541
542 public string OutputsFile { get; private set; }
543
544 public string BuiltOutputsFile { get; private set; }
545 531
546 public List<string> Ices { get; } = new List<string>(); 532 public List<string> Ices { get; } = new List<string>();
547 533
@@ -610,16 +596,8 @@ namespace WixToolset.Core.CommandLine
610 parser.GetNextArgumentOrError(arg, this.Cultures); 596 parser.GetNextArgumentOrError(arg, this.Cultures);
611 return true; 597 return true;
612 598
613 case "contentsfile": 599 case "trackingfile":
614 this.ContentsFile = parser.GetNextArgumentAsFilePathOrError(arg); 600 this.TrackingFile = parser.GetNextArgumentAsFilePathOrError(arg);
615 return true;
616
617 case "outputsfile":
618 this.OutputsFile = parser.GetNextArgumentAsFilePathOrError(arg);
619 return true;
620
621 case "builtoutputsfile":
622 this.BuiltOutputsFile = parser.GetNextArgumentAsFilePathOrError(arg);
623 return true; 601 return true;
624 602
625 case "d": 603 case "d":
diff --git a/src/wix/WixToolset.Core/ExtensibilityServices/TrackedFile.cs b/src/wix/WixToolset.Core/ExtensibilityServices/TrackedFile.cs
index 028cddbf..570fb029 100644
--- a/src/wix/WixToolset.Core/ExtensibilityServices/TrackedFile.cs
+++ b/src/wix/WixToolset.Core/ExtensibilityServices/TrackedFile.cs
@@ -12,7 +12,7 @@ namespace WixToolset.Core.ExtensibilityServices
12 this.Path = path; 12 this.Path = path;
13 this.Type = type; 13 this.Type = type;
14 this.SourceLineNumbers = sourceLineNumbers; 14 this.SourceLineNumbers = sourceLineNumbers;
15 this.Clean = (type == TrackedFileType.Intermediate || type == TrackedFileType.Final); 15 this.Clean = (type == TrackedFileType.Intermediate || type == TrackedFileType.BuiltOutput || type == TrackedFileType.CopiedOutput);
16 } 16 }
17 17
18 public bool Clean { get; set; } 18 public bool Clean { get; set; }
diff --git a/src/wix/WixToolset.Core/LayoutContext.cs b/src/wix/WixToolset.Core/LayoutContext.cs
index 4b8c7b99..3def3006 100644
--- a/src/wix/WixToolset.Core/LayoutContext.cs
+++ b/src/wix/WixToolset.Core/LayoutContext.cs
@@ -27,11 +27,7 @@ namespace WixToolset.Core
27 27
28 public string IntermediateFolder { get; set; } 28 public string IntermediateFolder { get; set; }
29 29
30 public string ContentsFile { get; set; } 30 public string TrackingFile { get; set; }
31
32 public string OutputsFile { get; set; }
33
34 public string BuiltOutputsFile { get; set; }
35 31
36 public bool ResetAcls { get; set; } 32 public bool ResetAcls { get; set; }
37 33
diff --git a/src/wix/WixToolset.Core/LayoutCreator.cs b/src/wix/WixToolset.Core/LayoutCreator.cs
index 0c5aaf63..7a143680 100644
--- a/src/wix/WixToolset.Core/LayoutCreator.cs
+++ b/src/wix/WixToolset.Core/LayoutCreator.cs
@@ -16,6 +16,8 @@ namespace WixToolset.Core
16 /// </summary> 16 /// </summary>
17 internal class LayoutCreator : ILayoutCreator 17 internal class LayoutCreator : ILayoutCreator
18 { 18 {
19 private const string TrackedLineTypePathSeparator = "\t";
20
19 internal LayoutCreator(IServiceProvider serviceProvider) 21 internal LayoutCreator(IServiceProvider serviceProvider)
20 { 22 {
21 this.Messaging = serviceProvider.GetService<IMessaging>(); 23 this.Messaging = serviceProvider.GetService<IMessaging>();
@@ -51,22 +53,9 @@ namespace WixToolset.Core
51 } 53 }
52 finally 54 finally
53 { 55 {
54 if (context.TrackedFiles != null) 56 if (context.TrackedFiles != null && !String.IsNullOrEmpty(context.TrackingFile))
55 { 57 {
56 if (!String.IsNullOrEmpty(context.ContentsFile)) 58 this.CreateTrackingFile(context.TrackingFile, context.TrackedFiles);
57 {
58 this.CreateContentsFile(context.ContentsFile, context.TrackedFiles);
59 }
60
61 if (!String.IsNullOrEmpty(context.OutputsFile))
62 {
63 this.CreateOutputsFile(context.OutputsFile, context.TrackedFiles);
64 }
65
66 if (!String.IsNullOrEmpty(context.BuiltOutputsFile))
67 {
68 this.CreateBuiltOutputsFile(context.BuiltOutputsFile, context.TrackedFiles);
69 }
70 } 59 }
71 } 60 }
72 61
@@ -78,72 +67,15 @@ namespace WixToolset.Core
78 } 67 }
79 68
80 /// <summary> 69 /// <summary>
81 /// Writes the paths to the content files to a text file. 70 /// Writes the paths of the track files to a text file.
82 /// </summary>
83 /// <param name="path">Path to write file.</param>
84 /// <param name="trackedFiles">Collection of paths to content files that will be written to file.</param>
85 private void CreateContentsFile(string path, IEnumerable<ITrackedFile> trackedFiles)
86 {
87 var uniqueInputFilePaths = new SortedSet<string>(trackedFiles.Where(t => t.Type == TrackedFileType.Input).Select(t => t.Path), StringComparer.OrdinalIgnoreCase);
88
89 if (!uniqueInputFilePaths.Any())
90 {
91 return;
92 }
93
94 var directory = Path.GetDirectoryName(path);
95 Directory.CreateDirectory(directory);
96
97 using (var contents = new StreamWriter(path, false))
98 {
99 foreach (var inputPath in uniqueInputFilePaths)
100 {
101 contents.WriteLine(inputPath);
102 }
103 }
104 }
105
106 /// <summary>
107 /// Writes the paths to the output files to a text file.
108 /// </summary>
109 /// <param name="path">Path to write file.</param>
110 /// <param name="trackedFiles">Collection of files that were transferred to the output directory.</param>
111 private void CreateOutputsFile(string path, IEnumerable<ITrackedFile> trackedFiles)
112 {
113 var uniqueOutputPaths = new SortedSet<string>(trackedFiles.Where(t => t.Clean).Select(t => t.Path), StringComparer.OrdinalIgnoreCase);
114
115 if (!uniqueOutputPaths.Any())
116 {
117 return;
118 }
119
120 var directory = Path.GetDirectoryName(path);
121 Directory.CreateDirectory(directory);
122
123 using (var outputs = new StreamWriter(path, false))
124 {
125 //// Don't list files where the source is the same as the destination since
126 //// that might be the only place the file exists. The outputs file is often
127 //// used to delete stuff and losing the original source would be bad.
128 //var uniqueOutputPaths = new SortedSet<string>(fileTransfers.Where(ft => !ft.Redundant).Select(ft => ft.Destination), StringComparer.OrdinalIgnoreCase);
129
130 foreach (var outputPath in uniqueOutputPaths)
131 {
132 outputs.WriteLine(outputPath);
133 }
134 }
135 }
136
137 /// <summary>
138 /// Writes the paths to the built output files to a text file.
139 /// </summary> 71 /// </summary>
140 /// <param name="path">Path to write file.</param> 72 /// <param name="path">Path to write file.</param>
141 /// <param name="trackedFiles">Collection of files that were transferred to the output directory.</param> 73 /// <param name="trackedFiles">Collection of files that were tracked.</param>
142 private void CreateBuiltOutputsFile(string path, IEnumerable<ITrackedFile> trackedFiles) 74 private void CreateTrackingFile(string path, IEnumerable<ITrackedFile> trackedFiles)
143 { 75 {
144 var uniqueBuiltPaths = new SortedSet<string>(trackedFiles.Where(t => t.Type == TrackedFileType.Final).Select(t => t.Path), StringComparer.OrdinalIgnoreCase); 76 var uniqueTrackingLines = new SortedSet<string>(trackedFiles.Where(t => t.Type != TrackedFileType.Temporary).Select(TrackedFileLine), StringComparer.OrdinalIgnoreCase);
145 77
146 if (!uniqueBuiltPaths.Any()) 78 if (!uniqueTrackingLines.Any())
147 { 79 {
148 return; 80 return;
149 } 81 }
@@ -151,11 +83,11 @@ namespace WixToolset.Core
151 var directory = Path.GetDirectoryName(path); 83 var directory = Path.GetDirectoryName(path);
152 Directory.CreateDirectory(directory); 84 Directory.CreateDirectory(directory);
153 85
154 using (var outputs = new StreamWriter(path, false)) 86 using (var stream = new StreamWriter(path, false))
155 { 87 {
156 foreach (var builtPath in uniqueBuiltPaths) 88 foreach (var trackingLine in uniqueTrackingLines)
157 { 89 {
158 outputs.WriteLine(builtPath); 90 stream.WriteLine(trackingLine);
159 } 91 }
160 } 92 }
161 } 93 }
@@ -219,5 +151,10 @@ namespace WixToolset.Core
219 } 151 }
220 } 152 }
221 } 153 }
154
155 private static string TrackedFileLine(ITrackedFile trackedFile)
156 {
157 return trackedFile.Type + TrackedLineTypePathSeparator + trackedFile.Path;
158 }
222 } 159 }
223} 160}
diff --git a/src/wix/WixToolset.Sdk/tools/wix.targets b/src/wix/WixToolset.Sdk/tools/wix.targets
index 7497a9f8..0029e217 100644
--- a/src/wix/WixToolset.Sdk/tools/wix.targets
+++ b/src/wix/WixToolset.Sdk/tools/wix.targets
@@ -112,18 +112,20 @@
112 <PropertyGroup> 112 <PropertyGroup>
113 <!-- Default pdb output path to the intermediate output directory --> 113 <!-- Default pdb output path to the intermediate output directory -->
114 <PdbOutputDir Condition=" '$(PdbOutputDir)'=='' ">$(TargetDir)</PdbOutputDir> 114 <PdbOutputDir Condition=" '$(PdbOutputDir)'=='' ">$(TargetDir)</PdbOutputDir>
115 <PdbOutputDir Condition=" !HasTrailingSlash('$(PdbOutputDir)') ">$(PdbOutputDir)\</PdbOutputDir> 115 <TargetPdbDir Condition=" '$(PdbOutputDir)'!='' ">$([MSBuild]::NormalizeDirectory($(MSBuildProjectDirectory), $(PdbOutputDir)))</TargetPdbDir>
116
117 <!-- Example, C:\MyProjects\MyProject\bin\debug\ -->
118 <TargetPdbDir Condition=" '$(PdbOutputDir)'!='' ">$([System.IO.Path]::GetFullPath(`$([System.IO.Path]::Combine(`$(MSBuildProjectDirectory)`, `$(PdbOutputDir)`))`))</TargetPdbDir>
119
120 <!-- Example, MySetup.wixpdb" -->
121 <TargetPdbFileName Condition=" '$(TargetPdbFileName)' == '' ">$(TargetName).wixpdb</TargetPdbFileName> 116 <TargetPdbFileName Condition=" '$(TargetPdbFileName)' == '' ">$(TargetName).wixpdb</TargetPdbFileName>
122
123 <!-- Example, C:\MyProjects\MyProject\bin\debug\MyPackage.wixpdb -->
124 <TargetPdbPath Condition=" '$(TargetPdbPath)' == '' ">$(TargetPdbDir)$(TargetPdbFileName)</TargetPdbPath> 117 <TargetPdbPath Condition=" '$(TargetPdbPath)' == '' ">$(TargetPdbDir)$(TargetPdbFileName)</TargetPdbPath>
125 </PropertyGroup> 118 </PropertyGroup>
126 119
120 <PropertyGroup>
121 <WixExtDir Condition=" '$(WixExtDir)' == ''">$(WixBinDir)</WixExtDir>
122 </PropertyGroup>
123
124 <PropertyGroup>
125 <BindTrackingFilePrefix Condition=" '$(BindTrackingFilePrefix)' == '' ">$(MSBuildProjectFile).BindTracking</BindTrackingFilePrefix>
126 <BindTrackingFileExtension Condition=" '$(BindTrackingFileExtension)' == '' ">.txt</BindTrackingFileExtension>
127 </PropertyGroup>
128
127 <!-- 129 <!--
128 *********************************************************************************************** 130 ***********************************************************************************************
129 *********************************************************************************************** 131 ***********************************************************************************************
@@ -154,24 +156,14 @@
154 <UsingTask TaskName="WixAssignCulture" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" /> 156 <UsingTask TaskName="WixAssignCulture" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" />
155 <UsingTask TaskName="WixAssignCulture" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" /> 157 <UsingTask TaskName="WixAssignCulture" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" />
156 158
159 <UsingTask TaskName="ReadTracking" Condition=" '$(WixTasksPath64)' == '' " AssemblyFile="$(WixTasksPath)" />
160 <UsingTask TaskName="ReadTracking" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" />
161 <UsingTask TaskName="ReadTracking" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" />
162
157 <UsingTask TaskName="ResolveWixReferences" Condition=" '$(WixTasksPath64)' == '' " AssemblyFile="$(WixTasksPath)" /> 163 <UsingTask TaskName="ResolveWixReferences" Condition=" '$(WixTasksPath64)' == '' " AssemblyFile="$(WixTasksPath)" />
158 <UsingTask TaskName="ResolveWixReferences" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" /> 164 <UsingTask TaskName="ResolveWixReferences" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" />
159 <UsingTask TaskName="ResolveWixReferences" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" /> 165 <UsingTask TaskName="ResolveWixReferences" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" />
160 166
161 <PropertyGroup>
162 <BindContentsFile Condition=" '$(BindContentsFile)' == '' ">$(MSBuildProjectFile).BindContentsFileList.txt</BindContentsFile>
163 <BindOutputsFile Condition=" '$(BindOutputsFile)' == '' ">$(MSBuildProjectFile).BindOutputsFileList.txt</BindOutputsFile>
164 <BindBuiltOutputsFile Condition=" '$(BindBuiltOutputsFile)' == '' ">$(MSBuildProjectFile).BindBuiltOutputsFileList.txt</BindBuiltOutputsFile>
165 </PropertyGroup>
166
167 <PropertyGroup>
168 <CabinetCachePath Condition=" '$(CabinetCachePath)'=='' and '$(ReuseCabinetCache)'=='true' ">$(IntermediateOutputPath)cabcache\</CabinetCachePath>
169 </PropertyGroup>
170
171 <PropertyGroup>
172 <WixExtDir Condition=" '$(WixExtDir)' == ''">$(WixBinDir)</WixExtDir>
173 </PropertyGroup>
174
175 <!-- 167 <!--
176 *********************************************************************************************** 168 ***********************************************************************************************
177 *********************************************************************************************** 169 ***********************************************************************************************
@@ -552,6 +544,9 @@
552 <PropertyGroup> 544 <PropertyGroup>
553 <TargetPath>@(_CulturedTargetPath)</TargetPath> 545 <TargetPath>@(_CulturedTargetPath)</TargetPath>
554 <TargetPdbPath>@(_CulturedTargetPdbPath)</TargetPdbPath> 546 <TargetPdbPath>@(_CulturedTargetPdbPath)</TargetPdbPath>
547
548 <!-- Update bind tracking filename prefix so cultures appended to the filename will be separated by a "-" -->
549 <BindTrackingFilePrefix>$(BindTrackingFilePrefix)-</BindTrackingFilePrefix>
555 </PropertyGroup> 550 </PropertyGroup>
556 </Target> 551 </Target>
557 552
@@ -615,18 +610,17 @@
615 Inputs="@(Compile); 610 Inputs="@(Compile);
616 @(Content); 611 @(Content);
617 @(_WixLocalizationFile); 612 @(_WixLocalizationFile);
618 @(WixObject);
619 @(_WixReferencedProjectOutputs); 613 @(_WixReferencedProjectOutputs);
620 @(_ResolvedWixLibraryPaths); 614 @(_ResolvedWixLibraryPaths);
621 @(_ResolvedWixExtensionPaths); 615 @(_ResolvedWixExtensionPaths);
622 @(_BindInputs)" 616 @(_BindInputs)"
623 Outputs="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile);@(_BindBuiltOutputs)" 617 Outputs="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.Identity)$(BindTrackingFileExtension);@(_BindBuiltOutputs)"
624 DependsOnTargets="$(CoreCompileDependsOn)" 618 DependsOnTargets="$(CoreCompileDependsOn)"
625 Condition=" '@(Compile)' != '' "> 619 Condition=" '@(Compile)' != '' ">
626 620
627 <PropertyGroup> 621 <PropertyGroup>
628 <OutputFile>$([System.IO.Path]::GetFullPath($(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetFileName)))</OutputFile> 622 <CabinetCachePath Condition=" '$(CabinetCachePath)'=='' and '$(ReuseCabinetCache)'=='true' ">$(IntermediateOutputPath)cabcache\</CabinetCachePath>
629 <PdbOutputFile>$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetPdbFileName)</PdbOutputFile> 623 <_WixBuildCabinetCachePath Condition=" '$(CabinetCachePath)'!='' ">$([MSBuild]::NormalizeDirectory($(CabinetCachePath), %(CultureGroup.OutputFolder)))</_WixBuildCabinetCachePath>
630 </PropertyGroup> 624 </PropertyGroup>
631 625
632 <WixBuild 626 <WixBuild
@@ -641,9 +635,9 @@
641 635
642 IntermediateDirectory="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)" 636 IntermediateDirectory="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)"
643 637
644 OutputFile="$(OutputFile)" 638 OutputFile="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetFileName)"
645 OutputType="$(OutputType)" 639 OutputType="$(OutputType)"
646 PdbFile="$(PdbOutputFile)" 640 PdbFile="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetPdbFileName)"
647 PdbType="$(WixPdbType)" 641 PdbType="$(WixPdbType)"
648 642
649 AdditionalOptions="$(CompilerAdditionalOptions) $(LinkerAdditionalOptions)" 643 AdditionalOptions="$(CompilerAdditionalOptions) $(LinkerAdditionalOptions)"
@@ -659,11 +653,9 @@
659 653
660 BindInputPaths="@(LinkerBindInputPaths)" 654 BindInputPaths="@(LinkerBindInputPaths)"
661 BindFiles="$(LinkerBindFiles)" 655 BindFiles="$(LinkerBindFiles)"
662 BindContentsFile="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindContentsFile)" 656 BindTrackingFile="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.Identity)$(BindTrackingFileExtension)"
663 BindOutputsFile="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindOutputsFile)"
664 BindBuiltOutputsFile="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile)"
665 657
666 CabinetCachePath="$(CabinetCachePath)" 658 CabinetCachePath="$(_WixBuildCabinetCachePath)"
667 CabinetCreationThreadCount="$(CabinetCreationThreadCount)" 659 CabinetCreationThreadCount="$(CabinetCreationThreadCount)"
668 DefaultCompressionLevel="$(DefaultCompressionLevel)" 660 DefaultCompressionLevel="$(DefaultCompressionLevel)"
669 661
@@ -754,16 +746,10 @@
754 <Target 746 <Target
755 Name="ReadPreviousBindInputsAndBuiltOutputs"> 747 Name="ReadPreviousBindInputsAndBuiltOutputs">
756 748
757 <ReadLinesFromFile File="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindContentsFile)"> 749 <ReadTracking File="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.Identity)$(BindTrackingFileExtension)">
758 <Output TaskParameter="Lines" ItemName="_BindInputs" /> 750 <Output TaskParameter="Inputs" ItemName="_BindInputs" />
759 </ReadLinesFromFile> 751 <Output TaskParameter="BuiltOutputs" ItemName="_BindBuiltOutputs" />
760 752 </ReadTracking>
761 <ReadLinesFromFile File="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile)">
762 <Output TaskParameter="Lines" ItemName="_BindBuiltOutputs" />
763 </ReadLinesFromFile>
764
765 <Message Importance="low" Text="Previous bind inputs: @(_BindInputs)" />
766 <Message Importance="low" Text="Previous bind outputs: @(_BindBuiltOutputs)" />
767 </Target> 753 </Target>
768 754
769 <!-- 755 <!--
@@ -789,17 +775,13 @@
789 Name="UpdateFileWritesWithBindInformation" 775 Name="UpdateFileWritesWithBindInformation"
790 AfterTargets="CoreCompile"> 776 AfterTargets="CoreCompile">
791 777
792 <ReadLinesFromFile File="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindOutputsFile)"> 778 <ReadTracking File="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.Identity)$(BindTrackingFileExtension)">
793 <Output TaskParameter="Lines" ItemName="FileWrites"/> 779 <Output TaskParameter="Outputs" ItemName="FileWrites" />
794 </ReadLinesFromFile> 780 </ReadTracking>
795 781
796 <ItemGroup> 782 <ItemGroup>
797 <FileWrites Include="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindContentsFile)" Condition=" Exists('$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindContentsFile)') " /> 783 <FileWrites Include="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.Identity)$(BindTrackingFileExtension)" Condition=" Exists('$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.Identity)$(BindTrackingFileExtension)') " />
798 <FileWrites Include="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindOutputsFile)" Condition=" Exists('$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindOutputsFile)') " />
799 <FileWrites Include="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile)" Condition=" Exists('$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile)') " />
800 </ItemGroup> 784 </ItemGroup>
801
802 <Message Importance="low" Text="Build files after link: @(FileWrites)" />
803 </Target> 785 </Target>
804 786
805 <!-- 787 <!--
@@ -862,10 +844,10 @@
862 844
863 <!-- Don't add BuiltProjectOutputGroupKeyOutput - to avoid duplicates, we only want to get the updated list of TargetPaths from the TargetPath property below --> 845 <!-- Don't add BuiltProjectOutputGroupKeyOutput - to avoid duplicates, we only want to get the updated list of TargetPaths from the TargetPath property below -->
864 846
865 <!-- Try to read the outputs from the bind outputs text file since that's the output list straight from compiler. --> 847 <!-- Try to read the outputs from the bind tracking text file since that's the output list straight from compiler. -->
866 <ReadLinesFromFile File="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile)"> 848 <ReadTracking File="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.Identity)$(BindTrackingFileExtension)">
867 <Output TaskParameter="Lines" ItemName="_BuiltProjectOutputGroupOutputIntermediate"/> 849 <Output TaskParameter="Outputs" ItemName="_BuiltProjectOutputGroupOutputIntermediate" />
868 </ReadLinesFromFile> 850 </ReadTracking>
869 851
870 <!-- If we didn't get anything from the bind outputs text file, default to the target path. --> 852 <!-- If we didn't get anything from the bind outputs text file, default to the target path. -->
871 <ItemGroup Condition=" '@(_BuiltProjectOutputGroupOutputIntermediate)'=='' "> 853 <ItemGroup Condition=" '@(_BuiltProjectOutputGroupOutputIntermediate)'=='' ">
@@ -930,17 +912,17 @@
930 <PropertyGroup> 912 <PropertyGroup>
931 <CopyBuildOutputToOutputDirectory Condition="'$(CopyBuildOutputToOutputDirectory)'==''">true</CopyBuildOutputToOutputDirectory> 913 <CopyBuildOutputToOutputDirectory Condition="'$(CopyBuildOutputToOutputDirectory)'==''">true</CopyBuildOutputToOutputDirectory>
932 <CopyOutputSymbolsToOutputDirectory Condition="'$(CopyOutputSymbolsToOutputDirectory)'==''">true</CopyOutputSymbolsToOutputDirectory> 914 <CopyOutputSymbolsToOutputDirectory Condition="'$(CopyOutputSymbolsToOutputDirectory)'==''">true</CopyOutputSymbolsToOutputDirectory>
933 <FullIntermediateOutputPath>$([System.IO.Path]::GetFullPath($(IntermediateOutputPath)))</FullIntermediateOutputPath> 915 <FullIntermediateOutputPath>$([MSBuild]::NormalizeDirectory($(IntermediateOutputPath)))</FullIntermediateOutputPath>
934 </PropertyGroup> 916 </PropertyGroup>
935 917
936 <!-- Copy the bound files. --> 918 <!-- Copy the bound output files. -->
937 <ReadLinesFromFile File="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(BindBuiltOutputsFile)"> 919 <ReadTracking File="$(IntermediateOutputPath)$(BindTrackingFilePrefix)%(CultureGroup.Identity)$(BindTrackingFileExtension)">
938 <Output TaskParameter="Lines" ItemName="_FullPathToCopy"/> 920 <Output TaskParameter="Outputs" ItemName="_FullPathToCopy" />
939 </ReadLinesFromFile> 921 </ReadTracking>
940 922
941 <ItemGroup> 923 <ItemGroup>
942 <_FullPathToCopy Include="$(OutputFile)" Condition=" '@(_FullPathToCopy)'=='' " /> 924 <_FullPathToCopy Include="$(IntermediateOutputPath)%(CultureGroup.OutputFolder)$(TargetFileName)" Condition=" '@(_FullPathToCopy)'=='' " />
943 <_RelativePath Include="$([MSBuild]::MakeRelative($(FullIntermediateOutputPath), %(_FullPathToCopy.Identity)))" /> 925 <_RelativePath Include="$([MSBuild]::MakeRelative($(FullIntermediateOutputPath), %(_FullPathToCopy.FullPath)))" />
944 </ItemGroup> 926 </ItemGroup>
945 927
946 <Copy 928 <Copy
diff --git a/src/wix/test/WixToolsetTest.Sdk/WixToolsetTest.Sdk.csproj b/src/wix/test/WixToolsetTest.Sdk/WixToolsetTest.Sdk.csproj
index 8f40efee..6111a184 100644
--- a/src/wix/test/WixToolsetTest.Sdk/WixToolsetTest.Sdk.csproj
+++ b/src/wix/test/WixToolsetTest.Sdk/WixToolsetTest.Sdk.csproj
@@ -19,8 +19,7 @@
19 </ItemGroup> 19 </ItemGroup>
20 20
21 <ItemGroup> 21 <ItemGroup>
22 <!-- <PackageReference Include="WixBuildTools.TestSupport" /> --> 22 <PackageReference Include="WixBuildTools.TestSupport" />
23 <ProjectReference Include="..\..\..\internal\WixBuildTools.TestSupport\WixBuildTools.TestSupport.csproj" />
24 </ItemGroup> 23 </ItemGroup>
25 24
26 <ItemGroup> 25 <ItemGroup>