Catch unhandled exceptions at the top to provide useful debug info
Fixes wixtoolset/issues#5884
Rob Mensching committed
Dec 27, 2018 at 11:07 UTC
c6da3f6d1c9b571d8f58745560332c3e0531a5c5
5 files changed
+37
-20
src/WixToolset.BuildTasks/DoIt.cs
+12
-10
@@ -4,8 +4,6 @@ namespace WixToolset.BuildTasks
4
{
5
using System;
6
using System.Collections.Generic;
7
- using System.Linq;
8
- using System.Reflection;
7
using System.Runtime.InteropServices;
8
using Microsoft.Build.Framework;
9
using Microsoft.Build.Utilities;
@@ -111,9 +109,17 @@ namespace WixToolset.BuildTasks
109
110
public override bool Execute()
111
{
112
+ var serviceProvider = new WixToolsetServiceProvider();
113
+
114
+ var listener = new MsbuildMessageListener(this.Log, "WIX", this.BuildEngine.ProjectFileOfTaskNode);
115
+
116
try
117
{
116
- this.ExecuteCore();
118
+ this.ExecuteCore(serviceProvider, listener);
119
+ }
120
+ catch (WixException e)
121
+ {
122
+ listener.Write(e.Error);
123
}
124
catch (Exception e)
125
{
@@ -128,10 +134,8 @@ namespace WixToolset.BuildTasks
134
return !this.Log.HasLoggedErrors;
135
}
136
131
- private void ExecuteCore()
137
+ private void ExecuteCore(IServiceProvider serviceProvider, IMessageListener listener)
138
{
133
- var listener = new MsbuildMessageListener(this.Log, "WIX", this.BuildEngine.ProjectFileOfTaskNode);
134
-
139
var commandLineBuilder = new WixCommandLineBuilder();
140
141
commandLineBuilder.AppendTextUnquoted("build");
@@ -164,8 +168,6 @@ namespace WixToolset.BuildTasks
168
169
this.Log.LogMessage(MessageImportance.Normal, "wix.exe " + commandLineString);
170
167
- var serviceProvider = new WixToolsetServiceProvider();
168
-
171
var messaging = serviceProvider.GetService<IMessaging>();
172
messaging.SetListener(listener);
173
@@ -194,9 +196,9 @@ namespace WixToolset.BuildTasks
196
{
197
extensionManager.Load(extension);
198
}
197
- catch (ReflectionTypeLoadException e)
199
+ catch (WixException e)
200
{
199
- messaging.Write(ErrorMessages.InvalidExtension(extension, String.Join(Environment.NewLine, e.LoaderExceptions.Select(le => le.ToString()))));
201
+ messaging.Write(e.Error);
202
}
203
}
204
src/WixToolset.BuildTasks/WixToolset.BuildTasks.csproj
-1
@@ -32,7 +32,6 @@
32
</ItemGroup>
33
34
<ItemGroup>
35
- <PackageReference Include="WixToolset.Core" Version="4.0.*" />
35
<PackageReference Include="WixToolset.Core.Burn" Version="4.0.*" />
36
<PackageReference Include="WixToolset.Core.WindowsInstaller" Version="4.0.*" />
37
</ItemGroup>
src/WixToolset.Tools.Core/WixToolset.Tools.Core.csproj
-2
@@ -11,8 +11,6 @@
11
</PropertyGroup>
12
13
<ItemGroup>
14
- <PackageReference Include="WixToolset.Data" Version="4.0.*" />
15
- <PackageReference Include="WixToolset.Extensibility" Version="4.0.*" />
14
<PackageReference Include="WixToolset.Core" Version="4.0.*" />
15
</ItemGroup>
16
src/wix/Program.cs
+25
-6
@@ -3,8 +3,7 @@
3
namespace WixToolset.Tools
4
{
5
using System;
6
- using System.Linq;
7
- using System.Reflection;
6
+ using System.Runtime.InteropServices;
7
using WixToolset.Core;
8
using WixToolset.Data;
9
using WixToolset.Extensibility;
@@ -29,8 +28,28 @@ namespace WixToolset.Tools
28
29
var listener = new ConsoleMessageListener("WIX", "wix.exe");
30
32
- var program = new Program();
33
- return program.Run(serviceProvider, listener, args);
31
+ try
32
+ {
33
+ var program = new Program();
34
+ return program.Run(serviceProvider, listener, args);
35
+ }
36
+ catch (WixException e)
37
+ {
38
+ listener.Write(e.Error);
39
+
40
+ return e.Error.Id;
41
+ }
42
+ catch (Exception e)
43
+ {
44
+ listener.Write(ErrorMessages.UnexpectedException(e.Message, e.GetType().ToString(), e.StackTrace));
45
+
46
+ if (e is NullReferenceException || e is SEHException)
47
+ {
48
+ throw;
49
+ }
50
+
51
+ return e.HResult;
52
+ }
53
}
54
55
/// <summary>
@@ -69,9 +88,9 @@ namespace WixToolset.Tools
88
{
89
extensionManager.Load(extension);
90
}
72
- catch (ReflectionTypeLoadException e)
91
+ catch (WixException e)
92
{
74
- messaging.Write(ErrorMessages.InvalidExtension(extension, String.Join(Environment.NewLine, e.LoaderExceptions.Select(le => le.ToString()))));
93
+ messaging.Write(e.Error);
94
}
95
}
96
src/wix/wix.csproj
-1
@@ -21,7 +21,6 @@
21
</ItemGroup>
22
23
<ItemGroup>
24
- <PackageReference Include="WixToolset.Core" Version="4.0.*" />
24
<PackageReference Include="WixToolset.Core.Burn" Version="4.0.*" />
25
<PackageReference Include="WixToolset.Core.WindowsInstaller" Version="4.0.*" />
26
</ItemGroup>