FUR*_*10N 10 c# .net-native c#-6.0
当我使用.NET Native编译器编译UWP应用程序并启用代码优化(实质上是发布模式)时,NullReferenceException当我尝试访问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)
{
}
Run Code Online (Sandbox Code Playgroud)
它进入正确的catch块,并NullReferenceException在我访问时抛出ex.只有在.Net Native和代码优化都启用时,这才会失败.
是什么导致这个问题?
我不确定为什么会出错(已经调试了很长一段时间),但缺乏await让我感到好奇.
如果等待该ShowAsync方法,则代码运行时没有问题(显然,async如果您还没有这样做,则需要创建该方法):
await new MessageDialog("Argument null exception: " + argEx.Message).ShowAsync();
Run Code Online (Sandbox Code Playgroud)
而代码块没有await失败.不确定这是一个错误还是你应该修复的东西......
我在 .NET Native 运行时和编译器团队工作。
这是我们编译器内部的一个错误。您可以将每个异常处理区域(try、catch、finally、when)视为一个小函数或“funclet”。当为“when”(又名过滤器块)设置堆栈时,我们失去了对异常对象的跟踪。这个错误在 Windows Tools 1.3 中得到了纠正,如果没有重大挫折,应该会在一周或两周内发布。对于已安装 VS 2015 Update 2 的用户来说,它将显示为更新。
如果您还有其他问题,请告诉我。