aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.BuildTasks
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2020-06-10 08:11:09 -0700
committerRob Mensching <rob@firegiant.com>2020-06-10 08:16:55 -0700
commit74e57bee9f6d9029cbbb2977c18f02d8ec18c50c (patch)
treef8cb65b4868e4a366d19053d173aa181512e9a4e /src/WixToolset.BuildTasks
parent5edb291f102959e993123ee402d364df450206cf (diff)
downloadwix-74e57bee9f6d9029cbbb2977c18f02d8ec18c50c.tar.gz
wix-74e57bee9f6d9029cbbb2977c18f02d8ec18c50c.tar.bz2
wix-74e57bee9f6d9029cbbb2977c18f02d8ec18c50c.zip
Update MSBuild task to support async commands and push heat out of proc
Diffstat (limited to 'src/WixToolset.BuildTasks')
-rw-r--r--src/WixToolset.BuildTasks/HeatTask.cs5
-rw-r--r--src/WixToolset.BuildTasks/HeatTask_InProc.cs16
-rw-r--r--src/WixToolset.BuildTasks/ToolsetTask_InProc.cs14
-rw-r--r--src/WixToolset.BuildTasks/WixBuild_InProc.cs7
4 files changed, 23 insertions, 19 deletions
diff --git a/src/WixToolset.BuildTasks/HeatTask.cs b/src/WixToolset.BuildTasks/HeatTask.cs
index 99cbae77..18c08342 100644
--- a/src/WixToolset.BuildTasks/HeatTask.cs
+++ b/src/WixToolset.BuildTasks/HeatTask.cs
@@ -17,6 +17,11 @@ namespace WixToolset.BuildTasks
17 private bool suppressUniqueIds; 17 private bool suppressUniqueIds;
18 private string[] transforms; 18 private string[] transforms;
19 19
20 public HeatTask()
21 {
22 this.RunAsSeparateProcess = true;
23 }
24
20 public bool AutogenerateGuids 25 public bool AutogenerateGuids
21 { 26 {
22 get { return this.autogenerageGuids; } 27 get { return this.autogenerageGuids; }
diff --git a/src/WixToolset.BuildTasks/HeatTask_InProc.cs b/src/WixToolset.BuildTasks/HeatTask_InProc.cs
index eb6feafc..dd763608 100644
--- a/src/WixToolset.BuildTasks/HeatTask_InProc.cs
+++ b/src/WixToolset.BuildTasks/HeatTask_InProc.cs
@@ -3,6 +3,9 @@
3#if !NETCOREAPP 3#if !NETCOREAPP
4namespace WixToolset.BuildTasks 4namespace WixToolset.BuildTasks
5{ 5{
6 using System;
7 using System.Threading;
8 using System.Threading.Tasks;
6 using WixToolset.Extensibility; 9 using WixToolset.Extensibility;
7 using WixToolset.Extensibility.Data; 10 using WixToolset.Extensibility.Data;
8 using WixToolset.Extensibility.Services; 11 using WixToolset.Extensibility.Services;
@@ -12,18 +15,7 @@ namespace WixToolset.BuildTasks
12 { 15 {
13 protected sealed override string TaskShortName => "HEAT"; 16 protected sealed override string TaskShortName => "HEAT";
14 17
15 protected sealed override int ExecuteCore(IWixToolsetServiceProvider serviceProvider, IMessageListener listener, string commandLineString) 18 protected sealed override Task<int> ExecuteCoreAsync(IWixToolsetCoreServiceProvider serviceProvider, string commandLineString, CancellationToken cancellationToken) => throw new NotImplementedException();
16 {
17 var messaging = serviceProvider.GetService<IMessaging>();
18 messaging.SetListener(listener);
19
20 var arguments = serviceProvider.GetService<ICommandLineArguments>();
21 arguments.Populate(commandLineString);
22
23 var commandLine = HeatCommandLineFactory.CreateCommandLine(serviceProvider, true);
24 var command = commandLine.ParseStandardCommandLine(arguments);
25 return command?.Execute() ?? -1;
26 }
27 } 19 }
28} 20}
29#endif 21#endif
diff --git a/src/WixToolset.BuildTasks/ToolsetTask_InProc.cs b/src/WixToolset.BuildTasks/ToolsetTask_InProc.cs
index a3290e60..6c83ee11 100644
--- a/src/WixToolset.BuildTasks/ToolsetTask_InProc.cs
+++ b/src/WixToolset.BuildTasks/ToolsetTask_InProc.cs
@@ -5,6 +5,8 @@ namespace WixToolset.BuildTasks
5{ 5{
6 using System; 6 using System;
7 using System.Runtime.InteropServices; 7 using System.Runtime.InteropServices;
8 using System.Threading;
9 using System.Threading.Tasks;
8 using Microsoft.Build.Framework; 10 using Microsoft.Build.Framework;
9 using WixToolset.Core; 11 using WixToolset.Core;
10 using WixToolset.Data; 12 using WixToolset.Data;
@@ -27,13 +29,17 @@ namespace WixToolset.BuildTasks
27 { 29 {
28 this.Log.LogMessage(MessageImportance.Normal, $"({this.ToolName}){commandLineString}"); 30 this.Log.LogMessage(MessageImportance.Normal, $"({this.ToolName}){commandLineString}");
29 31
30 var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
31 var listener = new MsbuildMessageListener(this.Log, this.TaskShortName, this.BuildEngine.ProjectFileOfTaskNode); 32 var listener = new MsbuildMessageListener(this.Log, this.TaskShortName, this.BuildEngine.ProjectFileOfTaskNode);
32 int exitCode = -1; 33 var exitCode = -1;
33 34
34 try 35 try
35 { 36 {
36 exitCode = this.ExecuteCore(serviceProvider, listener, commandLineString); 37 var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
38
39 var messaging = serviceProvider.GetService<IMessaging>();
40 messaging.SetListener(listener);
41
42 exitCode = this.ExecuteCoreAsync(serviceProvider, commandLineString, CancellationToken.None).GetAwaiter().GetResult();
37 } 43 }
38 catch (WixException e) 44 catch (WixException e)
39 { 45 {
@@ -65,7 +71,7 @@ namespace WixToolset.BuildTasks
65 } 71 }
66 } 72 }
67 73
68 protected abstract int ExecuteCore(IWixToolsetServiceProvider serviceProvider, IMessageListener messageListener, string commandLineString); 74 protected abstract Task<int> ExecuteCoreAsync(IWixToolsetCoreServiceProvider serviceProvider, string commandLineString, CancellationToken cancellationToken);
69 75
70 protected abstract string TaskShortName { get; } 76 protected abstract string TaskShortName { get; }
71 } 77 }
diff --git a/src/WixToolset.BuildTasks/WixBuild_InProc.cs b/src/WixToolset.BuildTasks/WixBuild_InProc.cs
index 49148c8a..59a42431 100644
--- a/src/WixToolset.BuildTasks/WixBuild_InProc.cs
+++ b/src/WixToolset.BuildTasks/WixBuild_InProc.cs
@@ -3,6 +3,8 @@
3#if !NETCOREAPP 3#if !NETCOREAPP
4namespace WixToolset.BuildTasks 4namespace WixToolset.BuildTasks
5{ 5{
6 using System.Threading;
7 using System.Threading.Tasks;
6 using WixToolset.Data; 8 using WixToolset.Data;
7 using WixToolset.Extensibility; 9 using WixToolset.Extensibility;
8 using WixToolset.Extensibility.Data; 10 using WixToolset.Extensibility.Data;
@@ -12,10 +14,9 @@ namespace WixToolset.BuildTasks
12 { 14 {
13 protected override string TaskShortName => "WIX"; 15 protected override string TaskShortName => "WIX";
14 16
15 protected override int ExecuteCore(IWixToolsetServiceProvider serviceProvider, IMessageListener listener, string commandLineString) 17 protected override Task<int> ExecuteCoreAsync(IWixToolsetCoreServiceProvider serviceProvider, string commandLineString, CancellationToken cancellationToken)
16 { 18 {
17 var messaging = serviceProvider.GetService<IMessaging>(); 19 var messaging = serviceProvider.GetService<IMessaging>();
18 messaging.SetListener(listener);
19 20
20 var arguments = serviceProvider.GetService<ICommandLineArguments>(); 21 var arguments = serviceProvider.GetService<ICommandLineArguments>();
21 arguments.Populate(commandLineString); 22 arguments.Populate(commandLineString);
@@ -24,7 +25,7 @@ namespace WixToolset.BuildTasks
24 commandLine.ExtensionManager = this.CreateExtensionManagerWithStandardBackends(serviceProvider, messaging, arguments.Extensions); 25 commandLine.ExtensionManager = this.CreateExtensionManagerWithStandardBackends(serviceProvider, messaging, arguments.Extensions);
25 commandLine.Arguments = arguments; 26 commandLine.Arguments = arguments;
26 var command = commandLine.ParseStandardCommandLine(); 27 var command = commandLine.ParseStandardCommandLine();
27 return command?.Execute() ?? -1; 28 return command?.ExecuteAsync(cancellationToken) ?? Task.FromResult(1);
28 } 29 }
29 30
30 private IExtensionManager CreateExtensionManagerWithStandardBackends(IWixToolsetServiceProvider serviceProvider, IMessaging messaging, string[] extensions) 31 private IExtensionManager CreateExtensionManagerWithStandardBackends(IWixToolsetServiceProvider serviceProvider, IMessaging messaging, string[] extensions)