Ensure inner exceptions from unexpected exceptions get logged.
Sean Hall committed
May 13, 2020 at 14:50 UTC
b1b1028efeaf1e0bb3b56c4006450a60ff8e699d
2 files changed
+44
-1
src/test/WixToolsetTest.BuildTasks/WixBuildTaskFixture.cs
+43
@@ -62,5 +62,48 @@ namespace WixToolsetTest.BuildTasks
62
Assert.Equal(@"test.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path);
63
}
64
}
65
+
66
+ [Fact(Skip = "Requires deleting wixnative.exe from output folder after build but before running the test.")]
67
+ public void ReportsInnerExceptionForUnexpectedExceptions()
68
+ {
69
+ var folder = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage");
70
+
71
+ using (var fs = new DisposableFileSystem())
72
+ {
73
+ var baseFolder = fs.GetFolder();
74
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
75
+ var pdbPath = Path.Combine(baseFolder, @"bin\testpackage.wixpdb");
76
+ var engine = new FakeBuildEngine();
77
+
78
+ var task = new DoIt
79
+ {
80
+ BuildEngine = engine,
81
+ SourceFiles = new[]
82
+ {
83
+ new TaskItem(Path.Combine(folder, "Package.wxs")),
84
+ new TaskItem(Path.Combine(folder, "PackageComponents.wxs")),
85
+ },
86
+ LocalizationFiles = new[]
87
+ {
88
+ new TaskItem(Path.Combine(folder, "Package.en-us.wxl")),
89
+ },
90
+ BindInputPaths = new[]
91
+ {
92
+ new TaskItem(Path.Combine(folder, "data")),
93
+ },
94
+ IntermediateDirectory = new TaskItem(intermediateFolder),
95
+ OutputFile = new TaskItem(Path.Combine(baseFolder, @"bin\test.msi")),
96
+ PdbType = "Full",
97
+ PdbFile = new TaskItem(pdbPath),
98
+ };
99
+
100
+ var result = task.Execute();
101
+ Assert.False(result, $"MSBuild task succeeded unexpectedly. Output:\r\n{engine.Output}");
102
+
103
+ Assert.Contains(
104
+ "System.PlatformNotSupportedException: Could not find platform specific 'wixnative.exe' ---> System.IO.FileNotFoundException: Could not find internal piece of WiX Toolset from",
105
+ engine.Output);
106
+ }
107
+ }
108
}
109
}
src/wix/Program.cs
+1
-1
@@ -41,7 +41,7 @@ namespace WixToolset.Tools
41
}
42
catch (Exception e)
43
{
44
- listener.Write(ErrorMessages.UnexpectedException(e.Message, e.GetType().ToString(), e.StackTrace));
44
+ listener.Write(ErrorMessages.UnexpectedException(e));
45
46
if (e is NullReferenceException || e is SEHException)
47
{