@joebigelow / wix / commits / c6da3f6d

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>