aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2022-10-06 11:59:31 -0700
committerRob Mensching <rob@firegiant.com>2022-10-14 20:13:50 -0700
commit5567239a9411aac769a34f2c65b80a523a577ad7 (patch)
tree158d3689253cdf86f7f346672d1178d1742724ce
parent8f8999f017c29d1cbe531d0fffbab1174c16596b (diff)
downloadwix-5567239a9411aac769a34f2c65b80a523a577ad7.tar.gz
wix-5567239a9411aac769a34f2c65b80a523a577ad7.tar.bz2
wix-5567239a9411aac769a34f2c65b80a523a577ad7.zip
Run wix.exe out of proc
"wix build" will load assemblies to read metadata which can cause the assemblies to get locked in the process. Since MSBuild keeps build processes alive this can cause work done by in-proc MSBuild tasks (like the WixBuild) to get stuck. Moving the "wix build" out of proc avoids any of those issues. Moving out of proc also allows the WiX tasks to be AnyCPU which simplifies the wix.targets (although did need to add code to find the .NET Framework wix.exe). Fixes 6595
-rw-r--r--src/internal/WixBuildTools.TestSupport/MsbuildUtilities.cs13
-rw-r--r--src/internal/internal.cmd25
-rw-r--r--src/internal/internal_t.proj7
-rw-r--r--src/testresultfilelist.txt3
-rw-r--r--src/tools/WixToolset.HeatTasks/WixToolset.HeatTasks.csproj1
-rw-r--r--src/tools/test/WixToolsetTest.HeatTasks/MsbuildHeatFixture.cs8
-rw-r--r--src/wix/Directory.Build.props4
-rw-r--r--src/wix/WixToolset.BuildTasks/MsbuildMessageListener.cs68
-rw-r--r--src/wix/WixToolset.BuildTasks/ToolsetTask.cs121
-rw-r--r--src/wix/WixToolset.BuildTasks/ToolsetTask_InProc.cs79
-rw-r--r--src/wix/WixToolset.BuildTasks/WixExeBaseTask.cs2
-rw-r--r--src/wix/WixToolset.BuildTasks/WixExeBaseTask_Inproc.cs28
-rw-r--r--src/wix/WixToolset.BuildTasks/WixToolset.BuildTasks.csproj11
-rw-r--r--src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj2
-rw-r--r--src/wix/WixToolset.Sdk/tools/WixToolset.Signing.targets3
-rw-r--r--src/wix/WixToolset.Sdk/tools/wix.targets46
-rw-r--r--src/wix/publish_t.proj37
-rw-r--r--src/wix/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs21
-rw-r--r--src/wix/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj3
-rw-r--r--src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs47
-rw-r--r--src/wix/wix.cmd64
21 files changed, 226 insertions, 367 deletions
diff --git a/src/internal/WixBuildTools.TestSupport/MsbuildUtilities.cs b/src/internal/WixBuildTools.TestSupport/MsbuildUtilities.cs
index 32680e5d..3271cc20 100644
--- a/src/internal/WixBuildTools.TestSupport/MsbuildUtilities.cs
+++ b/src/internal/WixBuildTools.TestSupport/MsbuildUtilities.cs
@@ -17,7 +17,7 @@ namespace WixToolsetTest.Sdk
17 17
18 public static class MsbuildUtilities 18 public static class MsbuildUtilities
19 { 19 {
20 public static MsbuildRunnerResult BuildProject(BuildSystem buildSystem, string projectPath, string[] arguments = null, string configuration = "Release", bool? outOfProc = null, string verbosityLevel = "normal", bool suppressValidation = true) 20 public static MsbuildRunnerResult BuildProject(BuildSystem buildSystem, string projectPath, string[] arguments = null, string configuration = "Release", string verbosityLevel = "normal", bool suppressValidation = true)
21 { 21 {
22 var allArgs = new List<string> 22 var allArgs = new List<string>
23 { 23 {
@@ -30,11 +30,6 @@ namespace WixToolsetTest.Sdk
30 $"-bl:{Path.ChangeExtension(projectPath, ".binlog")}" 30 $"-bl:{Path.ChangeExtension(projectPath, ".binlog")}"
31 }; 31 };
32 32
33 if (outOfProc.HasValue)
34 {
35 allArgs.Add($"-p:RunWixToolsOutOfProc={outOfProc.Value}");
36 }
37
38 if (arguments != null) 33 if (arguments != null)
39 { 34 {
40 allArgs.AddRange(arguments); 35 allArgs.AddRange(arguments);
@@ -96,11 +91,9 @@ namespace WixToolsetTest.Sdk
96 } 91 }
97 } 92 }
98 93
99 public static IEnumerable<string> GetToolCommandLines(MsbuildRunnerResult result, string toolName, string operation, BuildSystem buildSystem, bool? outOfProc = null) 94 public static IEnumerable<string> GetToolCommandLines(MsbuildRunnerResult result, string toolName, string operation, BuildSystem buildSystem)
100 { 95 {
101 var expectedOutOfProc = buildSystem == BuildSystem.DotNetCoreSdk || outOfProc.HasValue && outOfProc.Value; 96 var expectedToolExe = buildSystem == BuildSystem.DotNetCoreSdk ? $"{toolName}.dll\"" : $"{toolName}.exe";
102 var expectedToolExe = !expectedOutOfProc ? $"({toolName}.exe)" :
103 buildSystem == BuildSystem.DotNetCoreSdk ? $"{toolName}.dll\"" : $"{toolName}.exe";
104 var expectedToolCommand = $"{expectedToolExe} {operation}"; 97 var expectedToolCommand = $"{expectedToolExe} {operation}";
105 return result.Output.Where(line => line.Contains(expectedToolCommand)); 98 return result.Output.Where(line => line.Contains(expectedToolCommand));
106 } 99 }
diff --git a/src/internal/internal.cmd b/src/internal/internal.cmd
index 8b46e77c..9380ce4e 100644
--- a/src/internal/internal.cmd
+++ b/src/internal/internal.cmd
@@ -2,10 +2,21 @@
2@pushd %~dp0 2@pushd %~dp0
3 3
4@set _C=Debug 4@set _C=Debug
5@set _L=%~dp0..\..\build\logs
6
5:parse_args 7:parse_args
6@if /i "%1"=="release" set _C=Release 8@if /i "%1"=="release" set _C=Release
9@if /i "%1"=="inc" set _INC=1
10@if /i "%1"=="clean" set _CLEAN=1
7@if not "%1"=="" shift & goto parse_args 11@if not "%1"=="" shift & goto parse_args
8 12
13@set _B=%~dp0..\..\build\wix\%_C%
14
15:: Clean
16
17@if "%_INC%"=="" call :clean
18@if NOT "%_CLEAN%"=="" goto :end
19
9@echo Building internal %_C% 20@echo Building internal %_C%
10 21
11:: internal 22:: internal
@@ -14,10 +25,18 @@ nuget restore || exit /b
14:: dotnet pack -c %_C% WixBuildTools.MsgGen\WixBuildTools.MsgGen.csproj || exit /b 25:: dotnet pack -c %_C% WixBuildTools.MsgGen\WixBuildTools.MsgGen.csproj || exit /b
15:: dotnet pack -c %_C% WixBuildTools.XsdGen\WixBuildTools.XsdGen.csproj || exit /b 26:: dotnet pack -c %_C% WixBuildTools.XsdGen\WixBuildTools.XsdGen.csproj || exit /b
16 27
17msbuild -t:Pack WixBuildTools.TestSupport\WixBuildTools.TestSupport.csproj -p:Configuration=%_C% -nologo -m -warnaserror -bl:..\..\build\logs\internal_build.binlog || exit /b 28msbuild internal_t.proj -p:Configuration=%_C% -nologo -warnaserror -bl:%_L%\internal_build.binlog || exit /b
29
30@goto :end
18 31
19msbuild -t:Build WixBuildTools.TestSupport.Native\WixBuildTools.TestSupport.Native.vcxproj -p:Configuration=%_C%;Platform=x86 -nologo || exit /b 32:clean
20msbuild -t:Build WixBuildTools.TestSupport.Native\WixBuildTools.TestSupport.Native.vcxproj -p:Configuration=%_C%;Platform=x64 -nologo || exit /b 33@rd /s/q "..\..\build\internal" 2> nul
34@del "..\..\build\artifacts\WixBuildTools.TestSupport.*.nupkg" 2> nul
35@del "..\..\build\artifacts\WixBuildTools.TestSupport.Native.*.nupkg" 2> nul
36@rd /s/q "%USERPROFILE%\.nuget\packages\wixbuildtools.testsupport" 2> nul
37@rd /s/q "%USERPROFILE%\.nuget\packages\wixbuildtools.testsupport.native" 2> nul
38@exit /b
21 39
40:end
22@popd 41@popd
23@endlocal 42@endlocal
diff --git a/src/internal/internal_t.proj b/src/internal/internal_t.proj
new file mode 100644
index 00000000..fda67786
--- /dev/null
+++ b/src/internal/internal_t.proj
@@ -0,0 +1,7 @@
1<Project Sdk="Microsoft.Build.Traversal">
2 <ItemGroup>
3 <ProjectReference Include="WixBuildTools.TestSupport\WixBuildTools.TestSupport.csproj" Targets="Pack" />
4 <ProjectReference Include="WixBuildTools.TestSupport.Native\WixBuildTools.TestSupport.Native.vcxproj" Properties="Platform=x86" />
5 <ProjectReference Include="WixBuildTools.TestSupport.Native\WixBuildTools.TestSupport.Native.vcxproj" Properties="Platform=x64" />
6 </ItemGroup>
7</Project>
diff --git a/src/testresultfilelist.txt b/src/testresultfilelist.txt
index 43e5df11..6a2eadcb 100644
--- a/src/testresultfilelist.txt
+++ b/src/testresultfilelist.txt
@@ -2,8 +2,7 @@ build/logs/TestResults/api.trx
2build/logs/TestResults/burn.trx 2build/logs/TestResults/burn.trx
3build/logs/TestResults/libs.trx 3build/logs/TestResults/libs.trx
4build/logs/TestResults/tools.trx 4build/logs/TestResults/tools.trx
5build/logs/TestResults/wix_prepublish.trx 5build/logs/TestResults/wix.trx
6build/logs/TestResults/wix_postpublish.trx
7build/logs/TestResults/WixToolsetTest.Bal.trx 6build/logs/TestResults/WixToolsetTest.Bal.trx
8build/logs/TestResults/WixToolsetTest.BurnE2E.trx 7build/logs/TestResults/WixToolsetTest.BurnE2E.trx
9build/logs/TestResults/WixToolsetTest.Dnc.HostGenerator.trx 8build/logs/TestResults/WixToolsetTest.Dnc.HostGenerator.trx
diff --git a/src/tools/WixToolset.HeatTasks/WixToolset.HeatTasks.csproj b/src/tools/WixToolset.HeatTasks/WixToolset.HeatTasks.csproj
index ddc75c69..21fb419c 100644
--- a/src/tools/WixToolset.HeatTasks/WixToolset.HeatTasks.csproj
+++ b/src/tools/WixToolset.HeatTasks/WixToolset.HeatTasks.csproj
@@ -7,7 +7,6 @@
7 <Title>WiX Toolset Heat MSBuild Tasks</Title> 7 <Title>WiX Toolset Heat MSBuild Tasks</Title>
8 <DebugType>embedded</DebugType> 8 <DebugType>embedded</DebugType>
9 <PublishRepositoryUrl>true</PublishRepositoryUrl> 9 <PublishRepositoryUrl>true</PublishRepositoryUrl>
10 <!-- https://github.com/Microsoft/msbuild/issues/2360 -->
11 <PlatformTarget>AnyCPU</PlatformTarget> 10 <PlatformTarget>AnyCPU</PlatformTarget>
12 </PropertyGroup> 11 </PropertyGroup>
13 12
diff --git a/src/tools/test/WixToolsetTest.HeatTasks/MsbuildHeatFixture.cs b/src/tools/test/WixToolsetTest.HeatTasks/MsbuildHeatFixture.cs
index d54da457..a0a98578 100644
--- a/src/tools/test/WixToolsetTest.HeatTasks/MsbuildHeatFixture.cs
+++ b/src/tools/test/WixToolsetTest.HeatTasks/MsbuildHeatFixture.cs
@@ -43,7 +43,7 @@ namespace WixToolsetTest.Sdk
43 }); 43 });
44 result.AssertSuccess(); 44 result.AssertSuccess();
45 45
46 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "file", buildSystem, true); 46 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "file", buildSystem);
47 Assert.Single(heatCommandLines); 47 Assert.Single(heatCommandLines);
48 48
49 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray(); 49 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray();
@@ -99,7 +99,7 @@ namespace WixToolsetTest.Sdk
99 }); 99 });
100 result.AssertSuccess(); 100 result.AssertSuccess();
101 101
102 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "file", buildSystem, true); 102 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "file", buildSystem);
103 Assert.Equal(2, heatCommandLines.Count()); 103 Assert.Equal(2, heatCommandLines.Count());
104 104
105 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray(); 105 var warnings = result.Output.Where(line => line.Contains(": warning")).ToArray();
@@ -185,7 +185,7 @@ namespace WixToolsetTest.Sdk
185 }); 185 });
186 result.AssertSuccess(); 186 result.AssertSuccess();
187 187
188 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "project", buildSystem, true); 188 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "project", buildSystem);
189 var heatCommandLine = Assert.Single(heatCommandLines); 189 var heatCommandLine = Assert.Single(heatCommandLines);
190 190
191 if (useToolsVersion && buildSystem != BuildSystem.DotNetCoreSdk) 191 if (useToolsVersion && buildSystem != BuildSystem.DotNetCoreSdk)
@@ -306,7 +306,7 @@ namespace WixToolsetTest.Sdk
306 }); 306 });
307 result.AssertSuccess(); 307 result.AssertSuccess();
308 308
309 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "project", buildSystem, true); 309 var heatCommandLines = MsbuildUtilities.GetToolCommandLines(result, "heat", "project", buildSystem);
310 var heatCommandLine = Assert.Single(heatCommandLines); 310 var heatCommandLine = Assert.Single(heatCommandLines);
311 311
312 if (useToolsVersion && buildSystem != BuildSystem.DotNetCoreSdk) 312 if (useToolsVersion && buildSystem != BuildSystem.DotNetCoreSdk)
diff --git a/src/wix/Directory.Build.props b/src/wix/Directory.Build.props
index 2e4d6227..09507ad6 100644
--- a/src/wix/Directory.Build.props
+++ b/src/wix/Directory.Build.props
@@ -7,4 +7,8 @@
7 </PropertyGroup> 7 </PropertyGroup>
8 8
9 <Import Project="..\Directory.Build.props" /> 9 <Import Project="..\Directory.Build.props" />
10
11 <PropertyGroup>
12 <PublishRoot>$(OutputPath)publish\</PublishRoot>
13 </PropertyGroup>
10</Project> 14</Project>
diff --git a/src/wix/WixToolset.BuildTasks/MsbuildMessageListener.cs b/src/wix/WixToolset.BuildTasks/MsbuildMessageListener.cs
deleted file mode 100644
index f186d721..00000000
--- a/src/wix/WixToolset.BuildTasks/MsbuildMessageListener.cs
+++ /dev/null
@@ -1,68 +0,0 @@
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
3#if !NETCOREAPP
4namespace WixToolset.BuildTasks
5{
6 using System;
7 using Microsoft.Build.Framework;
8 using Microsoft.Build.Utilities;
9 using WixToolset.Data;
10 using WixToolset.Extensibility;
11 using WixToolset.Extensibility.Services;
12
13 public sealed class MsbuildMessageListener : IMessageListener
14 {
15 public MsbuildMessageListener(TaskLoggingHelper logger, string shortName, string longName)
16 {
17 this.Logger = logger;
18 this.ShortAppName = shortName;
19 this.LongAppName = longName;
20 }
21
22 public string ShortAppName { get; }
23
24 public string LongAppName { get; }
25
26 private TaskLoggingHelper Logger { get; }
27
28 public void Write(Message message)
29 {
30 var code = this.ShortAppName + message.Id.ToString();
31 var file = message.SourceLineNumbers?.FileName ?? this.LongAppName;
32 var lineNumber = message.SourceLineNumbers?.LineNumber ?? 0;
33 switch (message.Level)
34 {
35 case MessageLevel.Error:
36 this.Logger.LogError(null, code, null, file, lineNumber, 0, 0, 0, message.ResourceNameOrFormat, message.MessageArgs);
37 break;
38
39 case MessageLevel.Verbose:
40 this.Logger.LogMessage(null, code, null, file, lineNumber, 0, 0, 0, MessageImportance.Low, message.ResourceNameOrFormat, message.MessageArgs);
41 break;
42
43 case MessageLevel.Warning:
44 this.Logger.LogWarning(null, code, null, file, lineNumber, 0, 0, 0, message.ResourceNameOrFormat, message.MessageArgs);
45 break;
46
47 default:
48 if (message.Id > 0)
49 {
50 this.Logger.LogMessage(null, code, null, file, lineNumber, 0, 0, 0, MessageImportance.Normal, message.ResourceNameOrFormat, message.MessageArgs);
51 }
52 else
53 {
54 this.Logger.LogMessage(MessageImportance.Normal, message.ResourceNameOrFormat, message.MessageArgs);
55 }
56 break;
57 }
58 }
59
60 public void Write(string message)
61 {
62 this.Logger.LogMessage(MessageImportance.Low, message);
63 }
64
65 public MessageLevel CalculateMessageLevel(IMessaging messaging, Message message, MessageLevel defaultMessageLevel) => defaultMessageLevel;
66 }
67}
68#endif
diff --git a/src/wix/WixToolset.BuildTasks/ToolsetTask.cs b/src/wix/WixToolset.BuildTasks/ToolsetTask.cs
index 7d4a7687..3eee7625 100644
--- a/src/wix/WixToolset.BuildTasks/ToolsetTask.cs
+++ b/src/wix/WixToolset.BuildTasks/ToolsetTask.cs
@@ -7,15 +7,8 @@ namespace WixToolset.BuildTasks
7 using System.Runtime.InteropServices; 7 using System.Runtime.InteropServices;
8 using Microsoft.Build.Utilities; 8 using Microsoft.Build.Utilities;
9 9
10 public abstract partial class ToolsetTask : ToolTask 10 public abstract class ToolsetTask : ToolTask
11 { 11 {
12#if NETCOREAPP
13 private static readonly string DotnetFullPath = Environment.GetEnvironmentVariable("DOTNET_HOST_PATH") ?? "dotnet";
14 private static readonly string ThisDllPath = typeof(ToolsetTask).Assembly.Location;
15#else
16 private static readonly string ThisDllPath = new Uri(typeof(ToolsetTask).Assembly.CodeBase).AbsolutePath;
17#endif
18
19 /// <summary> 12 /// <summary>
20 /// Gets or sets additional options that are appended the the tool command-line. 13 /// Gets or sets additional options that are appended the the tool command-line.
21 /// </summary> 14 /// </summary>
@@ -31,12 +24,6 @@ namespace WixToolset.BuildTasks
31 public bool NoLogo { get; set; } 24 public bool NoLogo { get; set; }
32 25
33 /// <summary> 26 /// <summary>
34 /// Gets or sets a flag indicating whether the task
35 /// should be run as separate process or in-proc.
36 /// </summary>
37 public virtual bool RunAsSeparateProcess { get; set; }
38
39 /// <summary>
40 /// Gets or sets whether all warnings should be suppressed. 27 /// Gets or sets whether all warnings should be suppressed.
41 /// </summary> 28 /// </summary>
42 public bool SuppressAllWarnings { get; set; } 29 public bool SuppressAllWarnings { get; set; }
@@ -61,20 +48,6 @@ namespace WixToolset.BuildTasks
61 /// </summary> 48 /// </summary>
62 public bool VerboseOutput { get; set; } 49 public bool VerboseOutput { get; set; }
63 50
64 private string DefaultToolFullPath => Path.Combine(Path.GetDirectoryName(ThisDllPath), this.ToolExe);
65
66 private string ToolFullPath
67 {
68 get
69 {
70 if (String.IsNullOrEmpty(this.ToolPath))
71 {
72 return this.DefaultToolFullPath;
73 }
74 return Path.Combine(this.ToolPath, this.ToolExe);
75 }
76 }
77
78 /// <summary> 51 /// <summary>
79 /// Get the path to the executable. 52 /// Get the path to the executable.
80 /// </summary> 53 /// </summary>
@@ -85,29 +58,22 @@ namespace WixToolset.BuildTasks
85 /// </remarks> 58 /// </remarks>
86 protected sealed override string GenerateFullPathToTool() 59 protected sealed override string GenerateFullPathToTool()
87 { 60 {
61 var defaultToolFullPath = this.GetDefaultToolFullPath();
62
88#if NETCOREAPP 63#if NETCOREAPP
89 if (IsSelfExecutable(this.DefaultToolFullPath, out var toolFullPath)) 64 // If we're pointing at an executable use that.
65 if (IsSelfExecutable(defaultToolFullPath, out var finalToolFullPath))
90 { 66 {
91 return toolFullPath; 67 return finalToolFullPath;
92 } 68 }
93 return DotnetFullPath; 69
70 // Otherwise, use "dotnet.exe" to run an assembly dll.
71 return Environment.GetEnvironmentVariable("DOTNET_HOST_PATH") ?? "dotnet";
94#else 72#else
95 if (!this.RunAsSeparateProcess) 73 return defaultToolFullPath;
96 {
97 // We need to return a path that exists, so if we're not actually going to run the tool then just return this dll path.
98 return ThisDllPath;
99 }
100 return this.DefaultToolFullPath;
101#endif 74#endif
102 } 75 }
103 76
104 protected sealed override string GenerateResponseFileCommands()
105 {
106 var commandLineBuilder = new WixCommandLineBuilder();
107 this.BuildCommandLine(commandLineBuilder);
108 return commandLineBuilder.ToString();
109 }
110
111 /// <summary> 77 /// <summary>
112 /// Builds a command line from options in this and derivative tasks. 78 /// Builds a command line from options in this and derivative tasks.
113 /// </summary> 79 /// </summary>
@@ -124,33 +90,88 @@ namespace WixToolset.BuildTasks
124 commandLineBuilder.AppendIfTrue("-wx", this.TreatWarningsAsErrors); 90 commandLineBuilder.AppendIfTrue("-wx", this.TreatWarningsAsErrors);
125 } 91 }
126 92
93 protected sealed override string GenerateResponseFileCommands()
94 {
95 var commandLineBuilder = new WixCommandLineBuilder();
96 this.BuildCommandLine(commandLineBuilder);
97 return commandLineBuilder.ToString();
98 }
99
127#if NETCOREAPP 100#if NETCOREAPP
128 protected override string GenerateCommandLineCommands() 101 protected override string GenerateCommandLineCommands()
129 { 102 {
130 if (IsSelfExecutable(this.ToolFullPath, out var toolFullPath)) 103 // If the target tool path is an executable, we don't need to add anything to the command-line.
104 var toolFullPath = this.GetToolFullPath();
105
106 if (IsSelfExecutable(toolFullPath, out var finalToolFullPath))
131 { 107 {
132 return null; 108 return null;
133 } 109 }
134 else 110 else // we're using "dotnet.exe" to run the assembly so add "exec" plus path to the command-line.
135 { 111 {
136 return $"exec \"{toolFullPath}\""; 112 return $"exec \"{finalToolFullPath}\"";
137 } 113 }
138 } 114 }
139 115
140 private static bool IsSelfExecutable(string proposedToolFullPath, out string toolFullPath) 116 private static bool IsSelfExecutable(string proposedToolFullPath, out string finalToolFullPath)
141 { 117 {
142 var toolFullPathWithoutExtension = Path.Combine(Path.GetDirectoryName(proposedToolFullPath), Path.GetFileNameWithoutExtension(proposedToolFullPath)); 118 var toolFullPathWithoutExtension = Path.Combine(Path.GetDirectoryName(proposedToolFullPath), Path.GetFileNameWithoutExtension(proposedToolFullPath));
143 var exeExtension = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : String.Empty; 119 var exeExtension = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : String.Empty;
144 var exeToolFullPath = $"{toolFullPathWithoutExtension}{exeExtension}"; 120 var exeToolFullPath = $"{toolFullPathWithoutExtension}{exeExtension}";
145 if (File.Exists(exeToolFullPath)) 121 if (File.Exists(exeToolFullPath))
146 { 122 {
147 toolFullPath = exeToolFullPath; 123 finalToolFullPath = exeToolFullPath;
148 return true; 124 return true;
149 } 125 }
150 126
151 toolFullPath = $"{toolFullPathWithoutExtension}.dll"; 127 finalToolFullPath = $"{toolFullPathWithoutExtension}.dll";
152 return false; 128 return false;
153 } 129 }
130#else
131 private static string GetArchitectureFolder(string baseFolder)
132 {
133 // First try to find a folder that matches this task's architecture.
134 var folder = RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant();
135
136 if (Directory.Exists(Path.Combine(baseFolder, folder)))
137 {
138 return folder;
139 }
140
141 // Try to fallback to "x86" folder.
142 if (folder != "x86" && Directory.Exists(Path.Combine(baseFolder, "x86")))
143 {
144 return "x86";
145 }
146
147 // Return empty, even though this isn't likely to be useful.
148 return String.Empty;
149 }
150#endif
151
152 private string GetDefaultToolFullPath()
153 {
154#if NETCOREAPP
155 var thisTaskFolder = Path.GetDirectoryName(typeof(ToolsetTask).Assembly.Location);
156
157 return Path.Combine(thisTaskFolder, this.ToolExe);
158#else
159 var thisTaskFolder = Path.GetDirectoryName(new Uri(typeof(ToolsetTask).Assembly.CodeBase).AbsolutePath);
160
161 var archFolder = GetArchitectureFolder(thisTaskFolder);
162
163 return Path.Combine(thisTaskFolder, archFolder, this.ToolExe);
154#endif 164#endif
165 }
166
167 private string GetToolFullPath()
168 {
169 if (String.IsNullOrEmpty(this.ToolPath))
170 {
171 return this.GetDefaultToolFullPath();
172 }
173
174 return Path.Combine(this.ToolPath, this.ToolExe);
175 }
155 } 176 }
156} 177}
diff --git a/src/wix/WixToolset.BuildTasks/ToolsetTask_InProc.cs b/src/wix/WixToolset.BuildTasks/ToolsetTask_InProc.cs
deleted file mode 100644
index eff117da..00000000
--- a/src/wix/WixToolset.BuildTasks/ToolsetTask_InProc.cs
+++ /dev/null
@@ -1,79 +0,0 @@
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
3#if !NETCOREAPP
4namespace WixToolset.BuildTasks
5{
6 using System;
7 using System.Runtime.InteropServices;
8 using System.Threading;
9 using System.Threading.Tasks;
10 using Microsoft.Build.Framework;
11 using WixToolset.Core;
12 using WixToolset.Data;
13 using WixToolset.Extensibility;
14 using WixToolset.Extensibility.Services;
15
16 public partial class ToolsetTask
17 {
18 protected override int ExecuteTool(string pathToTool, string responseFileCommands, string commandLineCommands)
19 {
20 if (this.RunAsSeparateProcess)
21 {
22 return base.ExecuteTool(pathToTool, responseFileCommands, commandLineCommands);
23 }
24
25 return this.ExecuteInProc($"{commandLineCommands} {responseFileCommands}");
26 }
27
28 private int ExecuteInProc(string commandLineString)
29 {
30 this.Log.LogMessage(MessageImportance.Normal, $"({this.ToolName}){commandLineString}");
31
32 var listener = new MsbuildMessageListener(this.Log, this.TaskShortName, this.BuildEngine.ProjectFileOfTaskNode);
33 var exitCode = -1;
34
35 try
36 {
37 var coreProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
38
39 var messaging = coreProvider.GetService<IMessaging>();
40 messaging.SetListener(listener);
41
42 exitCode = this.ExecuteCoreAsync(coreProvider, commandLineString, CancellationToken.None).GetAwaiter().GetResult();
43 }
44 catch (WixException e)
45 {
46 listener.Write(e.Error);
47 }
48 catch (Exception e)
49 {
50 this.Log.LogErrorFromException(e, showStackTrace: true, showDetail: true, null);
51
52 if (e is NullReferenceException || e is SEHException)
53 {
54 throw;
55 }
56 }
57
58 if (exitCode == 0 && this.Log.HasLoggedErrors)
59 {
60 exitCode = -1;
61 }
62 return exitCode;
63 }
64
65 protected sealed override void LogToolCommand(string message)
66 {
67 // Only log this if we're actually going to do it.
68 if (this.RunAsSeparateProcess)
69 {
70 base.LogToolCommand(message);
71 }
72 }
73
74 protected abstract Task<int> ExecuteCoreAsync(IWixToolsetCoreServiceProvider coreProvider, string commandLineString, CancellationToken cancellationToken);
75
76 protected abstract string TaskShortName { get; }
77 }
78}
79#endif
diff --git a/src/wix/WixToolset.BuildTasks/WixExeBaseTask.cs b/src/wix/WixToolset.BuildTasks/WixExeBaseTask.cs
index c1904213..5583f64e 100644
--- a/src/wix/WixToolset.BuildTasks/WixExeBaseTask.cs
+++ b/src/wix/WixToolset.BuildTasks/WixExeBaseTask.cs
@@ -5,7 +5,7 @@ namespace WixToolset.BuildTasks
5 /// <summary> 5 /// <summary>
6 /// An MSBuild task to run WiX to update cabinet signatures in a MSI. 6 /// An MSBuild task to run WiX to update cabinet signatures in a MSI.
7 /// </summary> 7 /// </summary>
8 public abstract partial class WixExeBaseTask : ToolsetTask 8 public abstract class WixExeBaseTask : ToolsetTask
9 { 9 {
10 protected override string ToolName => "wix.exe"; 10 protected override string ToolName => "wix.exe";
11 } 11 }
diff --git a/src/wix/WixToolset.BuildTasks/WixExeBaseTask_Inproc.cs b/src/wix/WixToolset.BuildTasks/WixExeBaseTask_Inproc.cs
deleted file mode 100644
index cda5f57f..00000000
--- a/src/wix/WixToolset.BuildTasks/WixExeBaseTask_Inproc.cs
+++ /dev/null
@@ -1,28 +0,0 @@
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
3#if !NETCOREAPP
4namespace WixToolset.BuildTasks
5{
6 using System;
7 using System.Threading;
8 using System.Threading.Tasks;
9 using WixToolset.Core.Burn;
10 using WixToolset.Core.WindowsInstaller;
11 using WixToolset.Extensibility.Services;
12
13 public abstract partial class WixExeBaseTask
14 {
15 protected override string TaskShortName => "WIX";
16
17 protected override Task<int> ExecuteCoreAsync(IWixToolsetCoreServiceProvider coreProvider, string commandLineString, CancellationToken cancellationToken)
18 {
19 coreProvider.AddWindowsInstallerBackend()
20 .AddBundleBackend();
21
22 var commandLine = coreProvider.GetService<ICommandLine>();
23 var command = commandLine.CreateCommand(commandLineString);
24 return command?.ExecuteAsync(cancellationToken) ?? Task.FromResult(1);
25 }
26 }
27}
28#endif
diff --git a/src/wix/WixToolset.BuildTasks/WixToolset.BuildTasks.csproj b/src/wix/WixToolset.BuildTasks/WixToolset.BuildTasks.csproj
index 1fce528e..92651ed2 100644
--- a/src/wix/WixToolset.BuildTasks/WixToolset.BuildTasks.csproj
+++ b/src/wix/WixToolset.BuildTasks/WixToolset.BuildTasks.csproj
@@ -8,8 +8,6 @@
8 <Title>WiX Toolset MSBuild Tasks</Title> 8 <Title>WiX Toolset MSBuild Tasks</Title>
9 <DebugType>embedded</DebugType> 9 <DebugType>embedded</DebugType>
10 <PublishRepositoryUrl>true</PublishRepositoryUrl> 10 <PublishRepositoryUrl>true</PublishRepositoryUrl>
11 <RuntimeIdentifiers Condition=" '$(RuntimeIdentifier)'=='' and '$(TargetFramework)'!='net6.0' ">win-x86;win-x64</RuntimeIdentifiers>
12 <!-- https://github.com/Microsoft/msbuild/issues/2360 -->
13 <PlatformTarget>AnyCPU</PlatformTarget> 11 <PlatformTarget>AnyCPU</PlatformTarget>
14 </PropertyGroup> 12 </PropertyGroup>
15 13
@@ -17,13 +15,4 @@
17 <PackageReference Include="WixToolset.Dtf.WindowsInstaller" /> 15 <PackageReference Include="WixToolset.Dtf.WindowsInstaller" />
18 <PackageReference Include="Microsoft.Build.Tasks.Core" /> 16 <PackageReference Include="Microsoft.Build.Tasks.Core" />
19 </ItemGroup> 17 </ItemGroup>
20
21 <ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework'" >
22 <ProjectReference Include="..\WixToolset.Core\WixToolset.Core.csproj" />
23 <ProjectReference Include="..\WixToolset.Core.Burn\WixToolset.Core.Burn.csproj" />
24 <ProjectReference Include="..\WixToolset.Core.WindowsInstaller\WixToolset.Core.WindowsInstaller.csproj" />
25 </ItemGroup>
26
27 <ItemGroup Condition="'$(TargetFramework)'=='net6.0' ">
28 </ItemGroup>
29</Project> 18</Project>
diff --git a/src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj b/src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj
index 550ba9da..8c2d866c 100644
--- a/src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj
+++ b/src/wix/WixToolset.Sdk/WixToolset.Sdk.csproj
@@ -5,7 +5,7 @@
5 <PropertyGroup> 5 <PropertyGroup>
6 <TargetFramework>net6.0</TargetFramework> 6 <TargetFramework>net6.0</TargetFramework>
7 <Description>WiX Toolset MSBuild integration</Description> 7 <Description>WiX Toolset MSBuild integration</Description>
8 <PublishDir>$(OutputPath)publish\WixToolset.Sdk\</PublishDir> 8 <PublishDir>$(PublishRoot)WixToolset.Sdk\</PublishDir>
9 <NuspecFile>$(MSBuildThisFileName).nuspec</NuspecFile> 9 <NuspecFile>$(MSBuildThisFileName).nuspec</NuspecFile>
10 <NuspecBasePath>$(PublishDir)</NuspecBasePath> 10 <NuspecBasePath>$(PublishDir)</NuspecBasePath>
11 </PropertyGroup> 11 </PropertyGroup>
diff --git a/src/wix/WixToolset.Sdk/tools/WixToolset.Signing.targets b/src/wix/WixToolset.Sdk/tools/WixToolset.Signing.targets
index abf25177..a575181a 100644
--- a/src/wix/WixToolset.Sdk/tools/WixToolset.Signing.targets
+++ b/src/wix/WixToolset.Sdk/tools/WixToolset.Signing.targets
@@ -213,7 +213,6 @@
213 VerboseOutput="$(InscribeVerboseOutput)" 213 VerboseOutput="$(InscribeVerboseOutput)"
214 AdditionalOptions="$(InscribeAdditionalOptions)" 214 AdditionalOptions="$(InscribeAdditionalOptions)"
215 215
216 RunAsSeparateProcess="$(RunWixToolsOutOfProc)"
217 ToolExe="$(WixToolExe)" 216 ToolExe="$(WixToolExe)"
218 ToolPath="$(WixToolDir)" /> 217 ToolPath="$(WixToolDir)" />
219 </Target> 218 </Target>
@@ -255,7 +254,6 @@
255 VerboseOutput="$(InscribeVerboseOutput)" 254 VerboseOutput="$(InscribeVerboseOutput)"
256 AdditionalOptions="$(InscribeAdditionalOptions)" 255 AdditionalOptions="$(InscribeAdditionalOptions)"
257 256
258 RunAsSeparateProcess="$(RunWixToolsOutOfProc)"
259 ToolExe="$(WixToolExe)" 257 ToolExe="$(WixToolExe)"
260 ToolPath="$(WixToolDir)"> 258 ToolPath="$(WixToolDir)">
261 <Output TaskParameter="Output" ItemName="SignBundleEngine" /> 259 <Output TaskParameter="Output" ItemName="SignBundleEngine" />
@@ -304,7 +302,6 @@
304 VerboseOutput="$(InscribeVerboseOutput)" 302 VerboseOutput="$(InscribeVerboseOutput)"
305 AdditionalOptions="$(InscribeAdditionalOptions)" 303 AdditionalOptions="$(InscribeAdditionalOptions)"
306 304
307 RunAsSeparateProcess="$(RunWixToolsOutOfProc)"
308 ToolExe="$(WixToolExe)" 305 ToolExe="$(WixToolExe)"
309 ToolPath="$(WixToolDir)"> 306 ToolPath="$(WixToolDir)">
310 <Output TaskParameter="Output" ItemName="SignBundle" /> 307 <Output TaskParameter="Output" ItemName="SignBundle" />
diff --git a/src/wix/WixToolset.Sdk/tools/wix.targets b/src/wix/WixToolset.Sdk/tools/wix.targets
index 752c7490..340fb91f 100644
--- a/src/wix/WixToolset.Sdk/tools/wix.targets
+++ b/src/wix/WixToolset.Sdk/tools/wix.targets
@@ -27,10 +27,8 @@
27 <!-- These properties can be overridden to support non-default installations. --> 27 <!-- These properties can be overridden to support non-default installations. -->
28 <PropertyGroup> 28 <PropertyGroup>
29 <WixBinDir Condition=" '$(WixBinDir)' == '' and '$(MSBuildRuntimeType)' == 'Core' ">$(MSBuildThisFileDirectory)net6.0\</WixBinDir> 29 <WixBinDir Condition=" '$(WixBinDir)' == '' and '$(MSBuildRuntimeType)' == 'Core' ">$(MSBuildThisFileDirectory)net6.0\</WixBinDir>
30 <WixBinDir Condition=" '$(WixBinDir)' == '' ">$(MSBuildThisFileDirectory)net472\x86\</WixBinDir> 30 <WixBinDir Condition=" '$(WixBinDir)' == '' ">$(MSBuildThisFileDirectory)net472\</WixBinDir>
31 <WixBinDir64 Condition=" '$(WixBinDir64)' == '' and '$(MSBuildRuntimeType)' != 'Core' ">$(MSBuildThisFileDirectory)net472\x64\</WixBinDir64>
32 <WixTasksPath Condition=" '$(WixTasksPath)' == '' ">$(WixBinDir)WixToolset.BuildTasks.dll</WixTasksPath> 31 <WixTasksPath Condition=" '$(WixTasksPath)' == '' ">$(WixBinDir)WixToolset.BuildTasks.dll</WixTasksPath>
33 <WixTasksPath64 Condition=" '$(WixTasksPath64)' == '' and '$(WixBinDir64)' != '' ">$(WixBinDir64)WixToolset.BuildTasks.dll</WixTasksPath64>
34 </PropertyGroup> 32 </PropertyGroup>
35 33
36 <PropertyGroup> 34 <PropertyGroup>
@@ -147,39 +145,14 @@
147 *********************************************************************************************** 145 ***********************************************************************************************
148 --> 146 -->
149 147
150 <!-- These tasks can be used as general-purpose build tasks. --> 148 <UsingTask TaskName="CreateItemAvoidingInference" AssemblyFile="$(WixTasksPath)" />
151 <UsingTask TaskName="WixBuild" Condition=" '$(WixTasksPath64)' == '' " AssemblyFile="$(WixTasksPath)" /> 149 <UsingTask TaskName="UpdateProjectReferenceMetadata" AssemblyFile="$(WixTasksPath)" />
152 <UsingTask TaskName="WixBuild" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" /> 150 <UsingTask TaskName="CreateProjectReferenceDefineConstantsAndBindPaths" AssemblyFile="$(WixTasksPath)" />
153 <UsingTask TaskName="WixBuild" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" /> 151 <UsingTask TaskName="WixAssignCulture" AssemblyFile="$(WixTasksPath)" />
154 152 <UsingTask TaskName="ReadTracking" AssemblyFile="$(WixTasksPath)" />
155 <!-- These tasks are specific to the build process defined in this file, and are not considered general-purpose build tasks. --> 153 <UsingTask TaskName="ResolveWixReferences" AssemblyFile="$(WixTasksPath)" />
156 <UsingTask TaskName="CreateItemAvoidingInference" Condition=" '$(WixTasksPath64)' == '' " AssemblyFile="$(WixTasksPath)" /> 154 <UsingTask TaskName="WixBuild" AssemblyFile="$(WixTasksPath)" />
157 <UsingTask TaskName="CreateItemAvoidingInference" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" /> 155 <UsingTask TaskName="WindowsInstallerValidation" AssemblyFile="$(WixTasksPath)" />
158 <UsingTask TaskName="CreateItemAvoidingInference" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" />
159
160 <UsingTask TaskName="UpdateProjectReferenceMetadata" Condition=" '$(WixTasksPath64)' == '' " AssemblyFile="$(WixTasksPath)" />
161 <UsingTask TaskName="UpdateProjectReferenceMetadata" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" />
162 <UsingTask TaskName="UpdateProjectReferenceMetadata" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" />
163
164 <UsingTask TaskName="CreateProjectReferenceDefineConstantsAndBindPaths" Condition=" '$(WixTasksPath64)' == '' " AssemblyFile="$(WixTasksPath)" />
165 <UsingTask TaskName="CreateProjectReferenceDefineConstantsAndBindPaths" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" />
166 <UsingTask TaskName="CreateProjectReferenceDefineConstantsAndBindPaths" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" />
167
168 <UsingTask TaskName="WixAssignCulture" Condition=" '$(WixTasksPath64)' == '' " AssemblyFile="$(WixTasksPath)" />
169 <UsingTask TaskName="WixAssignCulture" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" />
170 <UsingTask TaskName="WixAssignCulture" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" />
171
172 <UsingTask TaskName="ReadTracking" Condition=" '$(WixTasksPath64)' == '' " AssemblyFile="$(WixTasksPath)" />
173 <UsingTask TaskName="ReadTracking" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" />
174 <UsingTask TaskName="ReadTracking" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" />
175
176 <UsingTask TaskName="ResolveWixReferences" Condition=" '$(WixTasksPath64)' == '' " AssemblyFile="$(WixTasksPath)" />
177 <UsingTask TaskName="ResolveWixReferences" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" />
178 <UsingTask TaskName="ResolveWixReferences" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" />
179
180 <UsingTask TaskName="WindowsInstallerValidation" Condition=" '$(WixTasksPath64)' == '' " AssemblyFile="$(WixTasksPath)" />
181 <UsingTask TaskName="WindowsInstallerValidation" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath)" Architecture="x86" />
182 <UsingTask TaskName="WindowsInstallerValidation" Condition=" '$(WixTasksPath64)' != '' " AssemblyFile="$(WixTasksPath64)" Architecture="x64" />
183 156
184 <!-- 157 <!--
185 *********************************************************************************************** 158 ***********************************************************************************************
@@ -661,7 +634,6 @@
661 TreatSpecificWarningsAsErrors="$(TreatSpecificWarningsAsErrors)" 634 TreatSpecificWarningsAsErrors="$(TreatSpecificWarningsAsErrors)"
662 VerboseOutput="$(VerboseOutput)" 635 VerboseOutput="$(VerboseOutput)"
663 636
664 RunAsSeparateProcess="$(RunWixToolsOutOfProc)"
665 ToolExe="$(WixToolExe)" 637 ToolExe="$(WixToolExe)"
666 ToolPath="$(WixToolDir)" 638 ToolPath="$(WixToolDir)"
667 YieldDuringToolExecution="true"> 639 YieldDuringToolExecution="true">
diff --git a/src/wix/publish_t.proj b/src/wix/publish_t.proj
index 0f034f2a..a50c75b8 100644
--- a/src/wix/publish_t.proj
+++ b/src/wix/publish_t.proj
@@ -1,14 +1,37 @@
1<Project Sdk="Microsoft.Build.Traversal"> 1<Project Sdk="Microsoft.Build.Traversal">
2 <PropertyGroup>
3 <StagePublishX86>$(BaseIntermediateOutputPath)$(Configuration)\net472\x86\</StagePublishX86>
4 <StagePublishX64>$(BaseIntermediateOutputPath)$(Configuration)\net472\x64\</StagePublishX64>
5 <StagePublishDnc>$(BaseIntermediateOutputPath)$(Configuration)\net6.0\</StagePublishDnc>
6
7 <PublishBuildFolder>$(PublishRoot)WixToolset.Sdk\build\</PublishBuildFolder>
8 <PublishHere>$(PublishRoot)WixToolset.Sdk\tools\net472\</PublishHere>
9 <PublishX86>$(PublishRoot)WixToolset.Sdk\tools\net472\x86\</PublishX86>
10 <PublishX64>$(PublishRoot)WixToolset.Sdk\tools\net472\x64\</PublishX64>
11 <PublishDnc>$(PublishRoot)WixToolset.Sdk\tools\net6.0\</PublishDnc>
12 </PropertyGroup>
13
2 <ItemGroup> 14 <ItemGroup>
15 <ProjectReference Include="WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" Properties="TargetFramework=net472;PublishDir=$(StagePublishX86)WixToolset.BuildTasks" Targets="Publish" />
16 <ProjectReference Include="WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" Properties="TargetFramework=net6.0;UseAppHost=false;PublishDir=$(StagePublishDnc)WixToolset.BuildTasks" Targets="Publish" />
17
3 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=net6.0;PublishDir=$(BaseOutputPath)$(Configuration)\publish\wix\" Targets="Publish" /> 18 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=net6.0;PublishDir=$(BaseOutputPath)$(Configuration)\publish\wix\" Targets="Publish" />
4 19
5 <ProjectReference Include="WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x86;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x86\buildtasks\" Targets="Publish" /> 20 <!-- wix.exe doesn't need to filter any files so publish it straight into its final location -->
6 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x86;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x86\wix\" Targets="Publish" /> 21 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x86;PublishDir=$(PublishX86)" Targets="Publish" />
22 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x64;PublishDir=$(PublishX64)" Targets="Publish" />
23 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=net6.0;UseAppHost=false;PublishDir=$(PublishDnc)" Targets="Publish" />
24 </ItemGroup>
7 25
8 <ProjectReference Include="WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x64;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x64\buildtasks\" Targets="Publish" /> 26 <Target Name="CopyToFinalPublishFolder" AfterTargets="Build">
9 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=net472;RuntimeIdentifier=win-x64;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net472\x64\wix\" Targets="Publish" /> 27 <ItemGroup>
28 <From Include="$(StagePublishX86)\WixToolset.BuildTasks\*.*" Exclude="$(StagePublishx86)\WixToolset.BuildTasks\Microsoft.Build.*.dll" To="$(PublishHere)" />
29 <From Include="$(StagePublishDnc)\WixToolset.BuildTasks\*.*" Exclude="$(StagePublishDnc)\WixToolset.BuildTasks\Microsoft.Build.*.dll" To="$(PublishDnc)" />
30 </ItemGroup>
10 31
11 <ProjectReference Include="WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" Properties="TargetFramework=net6.0;UseAppHost=false;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net6.0\buildtasks\" Targets="Publish" /> 32 <Copy SourceFiles="@(From)"
12 <ProjectReference Include="wix\wix.csproj" Properties="TargetFramework=net6.0;UseAppHost=false;PublishDir=$(BaseIntermediateOutputPath)$(Configuration)\WixToolset.Sdk\separate\net6.0\wix\" Targets="Publish" /> 33 DestinationFiles="%(To)%(RecursiveDir)%(Filename)%(Extension)"
13 </ItemGroup> 34 SkipUnchangedFiles="true"
35 UseHardlinksIfPossible="true" />
36 </Target>
14</Project> 37</Project>
diff --git a/src/wix/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs b/src/wix/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs
index f158e3f2..5271c1bb 100644
--- a/src/wix/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs
+++ b/src/wix/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs
@@ -2,8 +2,10 @@
2 2
3namespace WixToolsetTest.BuildTasks 3namespace WixToolsetTest.BuildTasks
4{ 4{
5 using System;
5 using System.IO; 6 using System.IO;
6 using System.Linq; 7 using System.Linq;
8 using System.Runtime.InteropServices;
7 using Microsoft.Build.Utilities; 9 using Microsoft.Build.Utilities;
8 using WixBuildTools.TestSupport; 10 using WixBuildTools.TestSupport;
9 using WixToolset.BuildTasks; 11 using WixToolset.BuildTasks;
@@ -13,16 +15,22 @@ namespace WixToolsetTest.BuildTasks
13 15
14 public class WixBuildTaskFixture 16 public class WixBuildTaskFixture
15 { 17 {
18 public static readonly string PublishedWixSdkToolsFolder = Path.Combine(Path.GetDirectoryName(new Uri(typeof(WixBuildTaskFixture).Assembly.CodeBase).AbsolutePath), "..", "..", "..", "publish", "WixToolset.Sdk", "tools");
19
20 // This line replicates what happens in WixBuild task when hosted in the PublishedWixSdkToolsFolder. However, WixBuild task is hosted inproc to this test assembly so the
21 // root folder is relative to the test assembly's folder which does not have wix.exe local. So, we have to find wix.exe relative to PublishedWixSdkToolsFolder.
22 public static readonly string PublishedWixExeFolder = Path.Combine(PublishedWixSdkToolsFolder, "net472", RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant());
23
16 [Fact] 24 [Fact]
17 public void CanBuildSimpleMsiPackage() 25 public void CanBuildSimpleMsiPackage()
18 { 26 {
19 var folder = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage"); 27 var folder = TestData.Get("TestData", "SimpleMsiPackage", "MsiPackage");
20 28
21 using (var fs = new DisposableFileSystem()) 29 using (var fs = new DisposableFileSystem())
22 { 30 {
23 var baseFolder = fs.GetFolder(); 31 var baseFolder = fs.GetFolder();
24 var intermediateFolder = Path.Combine(baseFolder, "obj"); 32 var intermediateFolder = Path.Combine(baseFolder, "obj");
25 var pdbPath = Path.Combine(baseFolder, @"bin\testpackage.wixpdb"); 33 var pdbPath = Path.Combine(baseFolder, "bin", "testpackage.wixpdb");
26 var engine = new FakeBuildEngine(); 34 var engine = new FakeBuildEngine();
27 35
28 var task = new WixBuild 36 var task = new WixBuild
@@ -42,24 +50,25 @@ namespace WixToolsetTest.BuildTasks
42 new TaskItem(Path.Combine(folder, "data")), 50 new TaskItem(Path.Combine(folder, "data")),
43 }, 51 },
44 IntermediateDirectory = new TaskItem(intermediateFolder), 52 IntermediateDirectory = new TaskItem(intermediateFolder),
45 OutputFile = new TaskItem(Path.Combine(baseFolder, @"bin\test.msi")), 53 OutputFile = new TaskItem(Path.Combine(baseFolder, "bin", "test.msi")),
46 PdbType = "Full", 54 PdbType = "Full",
47 PdbFile = new TaskItem(pdbPath), 55 PdbFile = new TaskItem(pdbPath),
48 DefaultCompressionLevel = "nOnE", 56 DefaultCompressionLevel = "nOnE",
57 ToolPath = PublishedWixExeFolder
49 }; 58 };
50 59
51 var result = task.Execute(); 60 var result = task.Execute();
52 Assert.True(result, $"MSBuild task failed unexpectedly. Output:\r\n{engine.Output}"); 61 Assert.True(result, $"MSBuild task failed unexpectedly. Output:\r\n{engine.Output}");
53 62
54 Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.msi"))); 63 Assert.True(File.Exists(Path.Combine(baseFolder, "bin", "test.msi")));
55 Assert.True(File.Exists(pdbPath)); 64 Assert.True(File.Exists(pdbPath));
56 Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\cab1.cab"))); 65 Assert.True(File.Exists(Path.Combine(baseFolder, "bin", "cab1.cab")));
57 66
58 var intermediate = Intermediate.Load(pdbPath); 67 var intermediate = Intermediate.Load(pdbPath);
59 var section = intermediate.Sections.Single(); 68 var section = intermediate.Sections.Single();
60 69
61 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single(); 70 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
62 WixAssert.StringEqual(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path); 71 WixAssert.StringEqual(Path.Combine(folder, "data", "test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
63 WixAssert.StringEqual(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path); 72 WixAssert.StringEqual(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
64 } 73 }
65 } 74 }
diff --git a/src/wix/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj b/src/wix/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj
index f8bb4438..d53dbe02 100644
--- a/src/wix/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj
+++ b/src/wix/test/WixToolsetTest.BuildTasks/WixToolsetTest.BuildTasks.csproj
@@ -4,7 +4,6 @@
4<Project Sdk="Microsoft.NET.Sdk"> 4<Project Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup> 5 <PropertyGroup>
6 <TargetFramework>net472</TargetFramework> 6 <TargetFramework>net472</TargetFramework>
7 <RuntimeIdentifier>win-x64</RuntimeIdentifier>
8 <RequiresNativeWixAssets>true</RequiresNativeWixAssets> 7 <RequiresNativeWixAssets>true</RequiresNativeWixAssets>
9 <IsWixTestProject>true</IsWixTestProject> 8 <IsWixTestProject>true</IsWixTestProject>
10 </PropertyGroup> 9 </PropertyGroup>
@@ -18,11 +17,11 @@
18 17
19 <ItemGroup> 18 <ItemGroup>
20 <ProjectReference Include="..\..\WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" /> 19 <ProjectReference Include="..\..\WixToolset.BuildTasks\WixToolset.BuildTasks.csproj" />
21 <ProjectReference Include="..\..\WixToolset.Core.TestPackage\WixToolset.Core.TestPackage.csproj" />
22 </ItemGroup> 20 </ItemGroup>
23 21
24 <ItemGroup> 22 <ItemGroup>
25 <PackageReference Include="Microsoft.Build.Tasks.Core" /> 23 <PackageReference Include="Microsoft.Build.Tasks.Core" />
24 <PackageReference Include="WixToolset.Data" />
26 <PackageReference Include="WixBuildTools.TestSupport" /> 25 <PackageReference Include="WixBuildTools.TestSupport" />
27 </ItemGroup> 26 </ItemGroup>
28</Project> 27</Project>
diff --git a/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs b/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
index bd6f70bc..1201620b 100644
--- a/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
+++ b/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
@@ -20,7 +20,7 @@ namespace WixToolsetTest.Sdk
20 [InlineData(BuildSystem.MSBuild64)] 20 [InlineData(BuildSystem.MSBuild64)]
21 public void CanBuildSimpleBundle(BuildSystem buildSystem) 21 public void CanBuildSimpleBundle(BuildSystem buildSystem)
22 { 22 {
23 var sourceFolder = TestData.Get(@"TestData\SimpleMsiPackage"); 23 var sourceFolder = TestData.Get(@"TestData", "SimpleMsiPackage");
24 24
25 using (var fs = new TestDataFolderFileSystem()) 25 using (var fs = new TestDataFolderFileSystem())
26 { 26 {
@@ -430,13 +430,10 @@ namespace WixToolsetTest.Sdk
430 } 430 }
431 431
432 [Theory] 432 [Theory]
433 [InlineData(BuildSystem.DotNetCoreSdk, null)] 433 [InlineData(BuildSystem.DotNetCoreSdk)]
434 [InlineData(BuildSystem.DotNetCoreSdk, true)] 434 [InlineData(BuildSystem.MSBuild)]
435 [InlineData(BuildSystem.MSBuild, null)] 435 [InlineData(BuildSystem.MSBuild64)]
436 [InlineData(BuildSystem.MSBuild, true)] 436 public void CanBuildSimpleMsiPackageAsWixipl(BuildSystem buildSystem)
437 [InlineData(BuildSystem.MSBuild64, null)]
438 [InlineData(BuildSystem.MSBuild64, true)]
439 public void CanBuildSimpleMsiPackageAsWixipl(BuildSystem buildSystem, bool? outOfProc)
440 { 437 {
441 var sourceFolder = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage"); 438 var sourceFolder = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage");
442 439
@@ -451,10 +448,10 @@ namespace WixToolsetTest.Sdk
451 { 448 {
452 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath), 449 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath),
453 "-p:OutputType=IntermediatePostLink", 450 "-p:OutputType=IntermediatePostLink",
454 }, outOfProc: outOfProc); 451 });
455 result.AssertSuccess(); 452 result.AssertSuccess();
456 453
457 var wixBuildCommands = MsbuildUtilities.GetToolCommandLines(result, "wix", "build", buildSystem, outOfProc); 454 var wixBuildCommands = MsbuildUtilities.GetToolCommandLines(result, "wix", "build", buildSystem);
458 Assert.Single(wixBuildCommands); 455 Assert.Single(wixBuildCommands);
459 456
460 var path = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories) 457 var path = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories)
@@ -465,13 +462,10 @@ namespace WixToolsetTest.Sdk
465 } 462 }
466 463
467 [Theory] 464 [Theory]
468 [InlineData(BuildSystem.DotNetCoreSdk, null)] 465 [InlineData(BuildSystem.DotNetCoreSdk)]
469 [InlineData(BuildSystem.DotNetCoreSdk, true)] 466 [InlineData(BuildSystem.MSBuild)]
470 [InlineData(BuildSystem.MSBuild, null)] 467 [InlineData(BuildSystem.MSBuild64)]
471 [InlineData(BuildSystem.MSBuild, true)] 468 public void CanBuildSimpleWixlib(BuildSystem buildSystem)
472 [InlineData(BuildSystem.MSBuild64, null)]
473 [InlineData(BuildSystem.MSBuild64, true)]
474 public void CanBuildSimpleWixlib(BuildSystem buildSystem, bool? outOfProc)
475 { 469 {
476 var sourceFolder = TestData.Get(@"TestData", "Wixlib", "SimpleWixlib"); 470 var sourceFolder = TestData.Get(@"TestData", "Wixlib", "SimpleWixlib");
477 471
@@ -485,10 +479,10 @@ namespace WixToolsetTest.Sdk
485 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] 479 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
486 { 480 {
487 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath), 481 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath),
488 }, outOfProc: outOfProc); 482 });
489 result.AssertSuccess(); 483 result.AssertSuccess();
490 484
491 var wixBuildCommands = MsbuildUtilities.GetToolCommandLines(result, "wix", "build", buildSystem, outOfProc); 485 var wixBuildCommands = MsbuildUtilities.GetToolCommandLines(result, "wix", "build", buildSystem);
492 Assert.Single(wixBuildCommands); 486 Assert.Single(wixBuildCommands);
493 487
494 var path = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories) 488 var path = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories)
@@ -499,13 +493,10 @@ namespace WixToolsetTest.Sdk
499 } 493 }
500 494
501 [Theory] 495 [Theory]
502 [InlineData(BuildSystem.DotNetCoreSdk, null)] 496 [InlineData(BuildSystem.DotNetCoreSdk)]
503 [InlineData(BuildSystem.DotNetCoreSdk, true)] 497 [InlineData(BuildSystem.MSBuild)]
504 [InlineData(BuildSystem.MSBuild, null)] 498 [InlineData(BuildSystem.MSBuild64)]
505 [InlineData(BuildSystem.MSBuild, true)] 499 public void CanBuildPackageIncludingSimpleWixlib(BuildSystem buildSystem)
506 [InlineData(BuildSystem.MSBuild64, null)]
507 [InlineData(BuildSystem.MSBuild64, true)]
508 public void CanBuildPackageIncludingSimpleWixlib(BuildSystem buildSystem, bool? outOfProc)
509 { 500 {
510 var sourceFolder = TestData.Get(@"TestData", "Wixlib"); 501 var sourceFolder = TestData.Get(@"TestData", "Wixlib");
511 502
@@ -519,7 +510,7 @@ namespace WixToolsetTest.Sdk
519 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] 510 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
520 { 511 {
521 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath), 512 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixMSBuildProps", MsbuildFixture.WixPropsPath),
522 }, outOfProc: outOfProc); 513 });
523 result.AssertSuccess(); 514 result.AssertSuccess();
524 515
525 var paths = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories) 516 var paths = Directory.EnumerateFiles(binFolder, @"*.*", SearchOption.AllDirectories)
@@ -612,7 +603,7 @@ namespace WixToolsetTest.Sdk
612 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[] 603 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
613 { 604 {
614 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixToolDir", Path.Combine(MsbuildFixture.WixMsbuildPath, "broken", "net461")), 605 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "WixToolDir", Path.Combine(MsbuildFixture.WixMsbuildPath, "broken", "net461")),
615 }, outOfProc: true); 606 });
616 Assert.Equal(1, result.ExitCode); 607 Assert.Equal(1, result.ExitCode);
617 608
618 var expectedMessage = "System.PlatformNotSupportedException: Could not find platform specific 'wixnative.exe' ---> System.IO.FileNotFoundException: Could not find internal piece of WiX Toolset from"; 609 var expectedMessage = "System.PlatformNotSupportedException: Could not find platform specific 'wixnative.exe' ---> System.IO.FileNotFoundException: Could not find internal piece of WiX Toolset from";
diff --git a/src/wix/wix.cmd b/src/wix/wix.cmd
index e1bfe384..c0a1c384 100644
--- a/src/wix/wix.cmd
+++ b/src/wix/wix.cmd
@@ -3,14 +3,19 @@
3 3
4@set _C=Debug 4@set _C=Debug
5@set _L=%~dp0..\..\build\logs 5@set _L=%~dp0..\..\build\logs
6
6:parse_args 7:parse_args
7@if /i "%1"=="release" set _C=Release 8@if /i "%1"=="release" set _C=Release
9@if /i "%1"=="inc" set _INC=1
10@if /i "%1"=="clean" set _CLEAN=1
8@if not "%1"=="" shift & goto parse_args 11@if not "%1"=="" shift & goto parse_args
9 12
10@set _B=%~dp0..\..\build\wix\%_C% 13@set _B=%~dp0..\..\build\wix\%_C%
11@set _P_OBJ=%~dp0..\..\build\wix\obj\publish_t\%_C%\ 14
12@set _P=%~dp0..\..\build\wix\%_C%\publish\ 15:: Clean
13@set _RCO=/S /R:1 /W:1 /NP /XO /NS /NC /NFL /NDL /NJH /NJS 16
17@if "%_INC%"=="" call :clean
18@if NOT "%_CLEAN%"=="" goto :end
14 19
15@echo Building wix %_C% 20@echo Building wix %_C%
16 21
@@ -23,29 +28,8 @@ msbuild wixnative\wixnative_t.proj -p:Configuration=%_C% -nologo -m -warnaserror
23 28
24msbuild wix.sln -p:Configuration=%_C% -nologo -m -warnaserror -bl:%_L%\wix_build.binlog || exit /b 29msbuild wix.sln -p:Configuration=%_C% -nologo -m -warnaserror -bl:%_L%\wix_build.binlog || exit /b
25 30
26
27:: Pre-Publish Test
28dotnet test ^
29 %_B%\test\WixToolsetTest.Converters\net6.0\WixToolsetTest.Converters.dll ^
30 %_B%\test\WixToolsetTest.Converters.Symbolizer\net472\WixToolsetTest.Converters.Symbolizer.dll ^
31 %_B%\test\WixToolsetTest.Core\net6.0\WixToolsetTest.Core.dll ^
32 %_B%\test\WixToolsetTest.Core.Native\net6.0\win-x64\WixToolsetTest.Core.Native.dll ^
33 %_B%\test\WixToolsetTest.CoreIntegration\net6.0\WixToolsetTest.CoreIntegration.dll ^
34 --nologo -l "trx;LogFileName=%_L%\TestResults\wix_prepublish.trx" || exit /b
35
36
37:: Publish
38msbuild publish_t.proj -p:Configuration=%_C% -nologo -warnaserror -bl:%_L%\wix_publish.binlog || exit /b 31msbuild publish_t.proj -p:Configuration=%_C% -nologo -warnaserror -bl:%_L%\wix_publish.binlog || exit /b
39 32
40robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x86\buildtasks %_P%\WixToolset.Sdk\tools\net472\x86 %_RCO% /XF Microsoft.Build.*.dll
41robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x86\wix %_P%\WixToolset.Sdk\tools\net472\x86 %_RCO%
42
43robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x64\buildtasks %_P%\WixToolset.Sdk\tools\net472\x64 %_RCO% /XF Microsoft.Build.*.dll
44robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x64\wix %_P%\WixToolset.Sdk\tools\net472\x64 %_RCO%
45
46robocopy %_P_OBJ%\WixToolset.Sdk\separate\net6.0\buildtasks %_P%\WixToolset.Sdk\tools\net6.0 %_RCO% /XF Microsoft.Build.*.dll
47robocopy %_P_OBJ%\WixToolset.Sdk\separate\net6.0\wix %_P%\WixToolset.Sdk\tools\net6.0 %_RCO%
48
49msbuild -t:Publish -p:Configuration=%_C% -nologo -warnaserror WixToolset.Sdk\WixToolset.Sdk.csproj -bl:%_L%\wix_sdk_publish.binlog || exit /b 33msbuild -t:Publish -p:Configuration=%_C% -nologo -warnaserror WixToolset.Sdk\WixToolset.Sdk.csproj -bl:%_L%\wix_sdk_publish.binlog || exit /b
50 34
51:: TODO - used by MsbuildFixture.ReportsInnerExceptionForUnexpectedExceptions test 35:: TODO - used by MsbuildFixture.ReportsInnerExceptionForUnexpectedExceptions test
@@ -54,13 +38,41 @@ msbuild -t:Publish -p:Configuration=%_C% -nologo -warnaserror WixToolset.Sdk\Wix
54 38
55:: Test 39:: Test
56dotnet test ^ 40dotnet test ^
57 %_B%\test\WixToolsetTest.BuildTasks\net472\win-x64\WixToolsetTest.BuildTasks.dll ^ 41 %_B%\test\WixToolsetTest.Converters\net6.0\WixToolsetTest.Converters.dll ^
42 %_B%\test\WixToolsetTest.Converters.Symbolizer\net472\WixToolsetTest.Converters.Symbolizer.dll ^
43 %_B%\test\WixToolsetTest.Core\net6.0\WixToolsetTest.Core.dll ^
44 %_B%\test\WixToolsetTest.Core.Native\net6.0\win-x64\WixToolsetTest.Core.Native.dll ^
45 %_B%\test\WixToolsetTest.CoreIntegration\net6.0\WixToolsetTest.CoreIntegration.dll ^
46 %_B%\test\WixToolsetTest.BuildTasks\net472\WixToolsetTest.BuildTasks.dll ^
58 %_B%\test\WixToolsetTest.Sdk\net472\WixToolsetTest.Sdk.dll ^ 47 %_B%\test\WixToolsetTest.Sdk\net472\WixToolsetTest.Sdk.dll ^
59 --nologo -l "trx;LogFileName=%_L%\TestResults\wix_postpublish.trx" || exit /b 48 --nologo -l "trx;LogFileName=%_L%\TestResults\wix.trx" || exit /b
60 49
61 50
62:: Pack 51:: Pack
63msbuild pack_t.proj -p:Configuration=%_C% -nologo -m -warnaserror -bl:%_L%\wix_pack.binlog || exit /b 52msbuild pack_t.proj -p:Configuration=%_C% -nologo -m -warnaserror -bl:%_L%\wix_pack.binlog || exit /b
64 53
54@goto :end
55
56:clean
57@rd /s/q "..\..\build\wix" 2> nul
58@del "..\..\build\artifacts\wix.*.nupkg" 2> nul
59@del "..\..\build\artifacts\WixToolset.BuildTasks.*.nupkg" 2> nul
60@del "..\..\build\artifacts\WixToolset.Converters.*.nupkg" 2> nul
61@del "..\..\build\artifacts\WixToolset.Core.*.nupkg" 2> nul
62@del "..\..\build\artifacts\WixToolset.Sdk.*.nupkg" 2> nul
63@del "%_L%\TestResults\wix.trx" 2> nul
64@rd /s/q "%USERPROFILE%\.nuget\packages\wix" 2> nul
65@rd /s/q "%USERPROFILE%\.nuget\packages\wixtoolset.buildtasks" 2> nul
66@rd /s/q "%USERPROFILE%\.nuget\packages\wixtoolset.converters" 2> nul
67@rd /s/q "%USERPROFILE%\.nuget\packages\wixtoolset.converters.symbolizer" 2> nul
68@rd /s/q "%USERPROFILE%\.nuget\packages\wixtoolset.core" 2> nul
69@rd /s/q "%USERPROFILE%\.nuget\packages\wixtoolset.core.burn" 2> nul
70@rd /s/q "%USERPROFILE%\.nuget\packages\wixtoolset.core.native" 2> nul
71@rd /s/q "%USERPROFILE%\.nuget\packages\wixtoolset.core.windowsinstaller" 2> nul
72@rd /s/q "%USERPROFILE%\.nuget\packages\wixtoolset.core.testpackage" 2> nul
73@rd /s/q "%USERPROFILE%\.nuget\packages\wixtoolset.sdk" 2> nul
74@exit /b
75
76:end
65@popd 77@popd
66@endlocal 78@endlocal