当我使用.NET Native编译器编译UWP应用程序并启用代码优化(实质上是发布模式)时,当我尝试访问catch块中的实际异常时,我得到try
{
throw new ArgumentNullException("Param");
}
catch (ArgumentNullException ex) when (ex.ParamName == "Param")
{
ErrorBlock.Text = ex.ParamName; // ErrorBlock is a TextBlock in the xaml
}
catch (Exception)
{
}
。
代码示例:
NullReferenceException
它进入正确的catch块,并在我访问ex
时抛出container view
。只有在.Net Native和代码优化都启用时,这才会失败。
导致此问题的原因是什么?
答案 0 :(得分:5)
我不确定为什么会出现问题(现在已经调试了很长时间),但缺少await
让我很好奇。
如果您等待ShowAsync
方法,代码运行没有问题(显然,如果您还没有这样做,则需要创建方法async
):
await new MessageDialog("Argument null exception: " + argEx.Message).ShowAsync();
虽然没有await
的代码块失败了。不确定这是一个错误还是你应该修复的东西......
答案 1 :(得分:2)
我在.NET Native运行时和编译器团队工作。
这是我们编译器中的一个错误。您可以将每个异常处理区域(try,catch,finally,when)视为一个小函数或“funclet”。在为“when”(也就是过滤器块)设置堆栈时,我们会丢失异常对象的跟踪。 Windows工具1.3中已更正此错误,如果没有重大挫折,则应在另一周或两周内发布。它将显示为已安装VS 2015 Update 2的人员的更新。
如果您有任何其他问题,请告诉我。