@joebigelow / wix / commits / ce9ac1dd

Log details when extension assembly types can't be loaded.

Bob Arnson committed Aug 22, 2018 at 14:21 UTC ce9ac1ddffd46daabc61ff4ba0069af576865bd1
3 files changed +25 -7
src/WixToolset.BuildTasks/DoIt.cs
+12 -3
@@ -4,6 +4,8 @@ namespace WixToolset.BuildTasks
4 {
5 using System;
6 using System.Collections.Generic;
7 + using System.Linq;
8 + using System.Reflection;
9 using System.Runtime.InteropServices;
10 using Microsoft.Build.Framework;
11 using Microsoft.Build.Utilities;
@@ -170,13 +172,13 @@ namespace WixToolset.BuildTasks
172 arguments.Populate(commandLineString);
173
174 var commandLine = serviceProvider.GetService<ICommandLineParser>();
173 - commandLine.ExtensionManager = this.CreateExtensionManagerWithStandardBackends(serviceProvider, arguments.Extensions);
175 + commandLine.ExtensionManager = this.CreateExtensionManagerWithStandardBackends(serviceProvider, messaging, arguments.Extensions);
176 commandLine.Arguments = arguments;
177 var command = commandLine.ParseStandardCommandLine();
178 command?.Execute();
179 }
180
179 - private IExtensionManager CreateExtensionManagerWithStandardBackends(IServiceProvider serviceProvider, string[] extensions)
181 + private IExtensionManager CreateExtensionManagerWithStandardBackends(IServiceProvider serviceProvider, IMessaging messaging, string[] extensions)
182 {
183 var extensionManager = serviceProvider.GetService<IExtensionManager>();
184
@@ -187,7 +189,14 @@ namespace WixToolset.BuildTasks
189
190 foreach (var extension in extensions)
191 {
190 - extensionManager.Load(extension);
192 + try
193 + {
194 + extensionManager.Load(extension);
195 + }
196 + catch (ReflectionTypeLoadException e)
197 + {
198 + messaging.Write(ErrorMessages.InvalidExtension(extension, String.Join(Environment.NewLine, e.LoaderExceptions.Select(le => le.ToString()))));
199 + }
200 }
201
202 return extensionManager;
src/wix/Program.cs
+12 -3
@@ -4,6 +4,8 @@ namespace WixToolset.Tools
4 {
5 using System;
6 using System.Globalization;
7 + using System.Linq;
8 + using System.Reflection;
9 using System.Text;
10 using System.Threading;
11 using WixToolset.Core;
@@ -48,13 +50,13 @@ namespace WixToolset.Tools
50 arguments.Populate(args);
51
52 var commandLine = serviceProvider.GetService<ICommandLineParser>();
51 - commandLine.ExtensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider, arguments.Extensions);
53 + commandLine.ExtensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider, messaging, arguments.Extensions);
54 commandLine.Arguments = arguments;
55 var command = commandLine.ParseStandardCommandLine();
56 return command?.Execute() ?? 1;
57 }
58
57 - private static IExtensionManager CreateExtensionManagerWithStandardBackends(IServiceProvider serviceProvider, string[] extensions)
59 + private static IExtensionManager CreateExtensionManagerWithStandardBackends(IServiceProvider serviceProvider, IMessaging messaging, string[] extensions)
60 {
61 var extensionManager = serviceProvider.GetService<IExtensionManager>();
62
@@ -65,7 +67,14 @@ namespace WixToolset.Tools
67
68 foreach (var extension in extensions)
69 {
68 - extensionManager.Load(extension);
70 + try
71 + {
72 + extensionManager.Load(extension);
73 + }
74 + catch (ReflectionTypeLoadException e)
75 + {
76 + messaging.Write(ErrorMessages.InvalidExtension(extension, String.Join(Environment.NewLine, e.LoaderExceptions.Select(le => le.ToString()))));
77 + }
78 }
79
80 return extensionManager;
src/wix/wix.csproj
+1 -1
@@ -3,7 +3,7 @@
3
4 <Project Sdk="Microsoft.NET.Sdk">
5 <PropertyGroup>
6 - <TargetFramework>netcoreapp2.1</TargetFramework>
6 + <TargetFrameworks>net461;netcoreapp2.1</TargetFrameworks>
7 <OutputType>Exe</OutputType>
8 <Description>Compiler</Description>
9 <Title>WiX Toolset Compiler</Title>