diff options
author | Rob Mensching <rob@firegiant.com> | 2022-10-06 11:59:31 -0700 |
---|---|---|
committer | Rob Mensching <rob@firegiant.com> | 2022-10-14 20:13:50 -0700 |
commit | 5567239a9411aac769a34f2c65b80a523a577ad7 (patch) | |
tree | 158d3689253cdf86f7f346672d1178d1742724ce | |
parent | 8f8999f017c29d1cbe531d0fffbab1174c16596b (diff) | |
download | wix-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
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 | ||
17 | msbuild -t:Pack WixBuildTools.TestSupport\WixBuildTools.TestSupport.csproj -p:Configuration=%_C% -nologo -m -warnaserror -bl:..\..\build\logs\internal_build.binlog || exit /b | 28 | msbuild internal_t.proj -p:Configuration=%_C% -nologo -warnaserror -bl:%_L%\internal_build.binlog || exit /b |
29 | |||
30 | @goto :end | ||
18 | 31 | ||
19 | msbuild -t:Build WixBuildTools.TestSupport.Native\WixBuildTools.TestSupport.Native.vcxproj -p:Configuration=%_C%;Platform=x86 -nologo || exit /b | 32 | :clean |
20 | msbuild -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 | |||
2 | build/logs/TestResults/burn.trx | 2 | build/logs/TestResults/burn.trx |
3 | build/logs/TestResults/libs.trx | 3 | build/logs/TestResults/libs.trx |
4 | build/logs/TestResults/tools.trx | 4 | build/logs/TestResults/tools.trx |
5 | build/logs/TestResults/wix_prepublish.trx | 5 | build/logs/TestResults/wix.trx |
6 | build/logs/TestResults/wix_postpublish.trx | ||
7 | build/logs/TestResults/WixToolsetTest.Bal.trx | 6 | build/logs/TestResults/WixToolsetTest.Bal.trx |
8 | build/logs/TestResults/WixToolsetTest.BurnE2E.trx | 7 | build/logs/TestResults/WixToolsetTest.BurnE2E.trx |
9 | build/logs/TestResults/WixToolsetTest.Dnc.HostGenerator.trx | 8 | build/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 | ||
4 | namespace 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 | ||
4 | namespace 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 | ||
4 | namespace 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 | ||
3 | namespace WixToolsetTest.BuildTasks | 3 | namespace 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 | ||
24 | msbuild wix.sln -p:Configuration=%_C% -nologo -m -warnaserror -bl:%_L%\wix_build.binlog || exit /b | 29 | msbuild wix.sln -p:Configuration=%_C% -nologo -m -warnaserror -bl:%_L%\wix_build.binlog || exit /b |
25 | 30 | ||
26 | |||
27 | :: Pre-Publish Test | ||
28 | dotnet 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 | ||
38 | msbuild publish_t.proj -p:Configuration=%_C% -nologo -warnaserror -bl:%_L%\wix_publish.binlog || exit /b | 31 | msbuild publish_t.proj -p:Configuration=%_C% -nologo -warnaserror -bl:%_L%\wix_publish.binlog || exit /b |
39 | 32 | ||
40 | robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x86\buildtasks %_P%\WixToolset.Sdk\tools\net472\x86 %_RCO% /XF Microsoft.Build.*.dll | ||
41 | robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x86\wix %_P%\WixToolset.Sdk\tools\net472\x86 %_RCO% | ||
42 | |||
43 | robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x64\buildtasks %_P%\WixToolset.Sdk\tools\net472\x64 %_RCO% /XF Microsoft.Build.*.dll | ||
44 | robocopy %_P_OBJ%\WixToolset.Sdk\separate\net472\x64\wix %_P%\WixToolset.Sdk\tools\net472\x64 %_RCO% | ||
45 | |||
46 | robocopy %_P_OBJ%\WixToolset.Sdk\separate\net6.0\buildtasks %_P%\WixToolset.Sdk\tools\net6.0 %_RCO% /XF Microsoft.Build.*.dll | ||
47 | robocopy %_P_OBJ%\WixToolset.Sdk\separate\net6.0\wix %_P%\WixToolset.Sdk\tools\net6.0 %_RCO% | ||
48 | |||
49 | msbuild -t:Publish -p:Configuration=%_C% -nologo -warnaserror WixToolset.Sdk\WixToolset.Sdk.csproj -bl:%_L%\wix_sdk_publish.binlog || exit /b | 33 | msbuild -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 |
56 | dotnet test ^ | 40 | dotnet 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 |
63 | msbuild pack_t.proj -p:Configuration=%_C% -nologo -m -warnaserror -bl:%_L%\wix_pack.binlog || exit /b | 52 | msbuild 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 |