我去年(兼职)将现有(且成功的)Windows 8.1 应用程序迁移到 Windows 10 UWP。现在,就在将其发布到商店之前,我在“发布”构建模式(触发 .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.";
}
在调试模式下,克隆二维数组意味着修改一个数组项不会影响另一个数组。在发布模式下,修改一个数组也会更改另一个数组。 (我使用的是最新的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 编译器配置为不那么具有破坏性吗?