diff --git a/src/WixToolset.BuildTasks/DoIt.cs b/src/WixToolset.BuildTasks/DoIt.cs index aeeb428..07bf05e 100644 --- a/src/WixToolset.BuildTasks/DoIt.cs +++ b/src/WixToolset.BuildTasks/DoIt.cs @@ -4,8 +4,6 @@ namespace WixToolset.BuildTasks { using System; using System.Collections.Generic; - using System.Linq; - using System.Reflection; using System.Runtime.InteropServices; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; @@ -111,9 +109,17 @@ public sealed class DoIt : Task public override bool Execute() { + var serviceProvider = new WixToolsetServiceProvider(); + + var listener = new MsbuildMessageListener(this.Log, "WIX", this.BuildEngine.ProjectFileOfTaskNode); + try { - this.ExecuteCore(); + this.ExecuteCore(serviceProvider, listener); + } + catch (WixException e) + { + listener.Write(e.Error); } catch (Exception e) { @@ -128,10 +134,8 @@ public override bool Execute() return !this.Log.HasLoggedErrors; } - private void ExecuteCore() + private void ExecuteCore(IServiceProvider serviceProvider, IMessageListener listener) { - var listener = new MsbuildMessageListener(this.Log, "WIX", this.BuildEngine.ProjectFileOfTaskNode); - var commandLineBuilder = new WixCommandLineBuilder(); commandLineBuilder.AppendTextUnquoted("build"); @@ -164,8 +168,6 @@ private void ExecuteCore() this.Log.LogMessage(MessageImportance.Normal, "wix.exe " + commandLineString); - var serviceProvider = new WixToolsetServiceProvider(); - var messaging = serviceProvider.GetService(); messaging.SetListener(listener); @@ -194,9 +196,9 @@ private IExtensionManager CreateExtensionManagerWithStandardBackends(IServicePro { extensionManager.Load(extension); } - catch (ReflectionTypeLoadException e) + catch (WixException e) { - messaging.Write(ErrorMessages.InvalidExtension(extension, String.Join(Environment.NewLine, e.LoaderExceptions.Select(le => le.ToString())))); + messaging.Write(e.Error); } } diff --git a/src/WixToolset.BuildTasks/WixToolset.BuildTasks.csproj b/src/WixToolset.BuildTasks/WixToolset.BuildTasks.csproj index 10a3f05..5020f89 100644 --- a/src/WixToolset.BuildTasks/WixToolset.BuildTasks.csproj +++ b/src/WixToolset.BuildTasks/WixToolset.BuildTasks.csproj @@ -32,7 +32,6 @@ - diff --git a/src/WixToolset.Tools.Core/WixToolset.Tools.Core.csproj b/src/WixToolset.Tools.Core/WixToolset.Tools.Core.csproj index 996258c..92111c6 100644 --- a/src/WixToolset.Tools.Core/WixToolset.Tools.Core.csproj +++ b/src/WixToolset.Tools.Core/WixToolset.Tools.Core.csproj @@ -11,8 +11,6 @@ - - diff --git a/src/wix/Program.cs b/src/wix/Program.cs index 276eba5..a3251f8 100644 --- a/src/wix/Program.cs +++ b/src/wix/Program.cs @@ -3,8 +3,7 @@ namespace WixToolset.Tools { using System; - using System.Linq; - using System.Reflection; + using System.Runtime.InteropServices; using WixToolset.Core; using WixToolset.Data; using WixToolset.Extensibility; @@ -29,8 +28,28 @@ public static int Main(string[] args) var listener = new ConsoleMessageListener("WIX", "wix.exe"); - var program = new Program(); - return program.Run(serviceProvider, listener, args); + try + { + var program = new Program(); + return program.Run(serviceProvider, listener, args); + } + catch (WixException e) + { + listener.Write(e.Error); + + return e.Error.Id; + } + catch (Exception e) + { + listener.Write(ErrorMessages.UnexpectedException(e.Message, e.GetType().ToString(), e.StackTrace)); + + if (e is NullReferenceException || e is SEHException) + { + throw; + } + + return e.HResult; + } } /// @@ -69,9 +88,9 @@ private static IExtensionManager CreateExtensionManagerWithStandardBackends(ISer { extensionManager.Load(extension); } - catch (ReflectionTypeLoadException e) + catch (WixException e) { - messaging.Write(ErrorMessages.InvalidExtension(extension, String.Join(Environment.NewLine, e.LoaderExceptions.Select(le => le.ToString())))); + messaging.Write(e.Error); } } diff --git a/src/wix/wix.csproj b/src/wix/wix.csproj index a923c66..9cb5658 100644 --- a/src/wix/wix.csproj +++ b/src/wix/wix.csproj @@ -21,7 +21,6 @@ -