相关疑难解决方法(0)

避免.NET Native bug

我花了去年(兼职)将我现有的(并且成功的)Windows 8.1应用程序迁移到Windows 10 UWP.现在,在将其发布到商店之前,我在"Release"构建模式(触发.NET Native)中测试了应用程序.一切似乎都有效,直到我 - 偶然 - 注意到一个微妙但严重(因为数据妥协)的错误.我花了两天时间把它缩减为这三行代码:

var array1 = new int[1, 1];
var array2 = (int[,])array1.Clone();
array2[0, 0] = 666;

if (array1[0, 0] != array2[0, 0]) {
    ApplicationView.GetForCurrentView().Title = "OK.";
} else {
    ApplicationView.GetForCurrentView().Title = "Bug.";
}
Run Code Online (Sandbox Code Playgroud)

在调试模式下,克隆2D数组意味着修改一个数组项不会影响另一个数组.在发布模式下,修改一个阵列也会改变另一个阵列.(我使用的是最新的VS 2017.)

现在,我意识到使用.NET Native 1.6(这不是VS 2017中的默认设置),解决了这个特殊问题.

但我失去了对.NET Native的信心..NET Native仍然在我的应用程序中引入了多少错误?我的Windows 8.1应用程序无需.NET Native即可快速顺畅地运行.那么为什么我必须使用似乎充满bug的.NET Native呢?(我在过去两天了解了很多.NET Native bug.)

最近,项目"UWP Desktop Bridge"允许将传统桌面应用程序发布到App Store(他们不必使用.NET Native).那为什么我必须使用.NET Native?

有没有办法完全跳过.NET Native?如果没有,我可以将.NET Native编译器配置为不那么具有破坏性吗?

c# compiler-optimization .net-native uwp

3
推荐指数
2
解决办法
467
查看次数

标签 统计

.net-native ×1

c# ×1

compiler-optimization ×1

uwp ×1