避免 .NET Native 错误

2024-03-09

我去年(兼职)将现有(且成功的)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 编译器配置为不那么具有破坏性吗?


.NET Native dev 这里 - 对于您遇到的麻烦深表歉意。正如你所说,你用 Array.Clone 遇到的问题已修复 https://github.com/dotnet/corert/commit/90698bcde54ddc0eb7c1c452cef6641f8b73bbac(无意中 - 作为不同修复的副作用)使用 .NET Native 1.6,我们将很乐意修复您遇到的任何其他问题。

为了引入 .NET Native,我们必须重写所有 CLR(其中包含 15 年以上的错误修复)。我们正处于 v1 阶段,与 CLR 相比,您在 .NET Native 中更有可能遇到错误。不过,大多数人在这两个平台上都不会遇到任何错误。由于使用 .NET Native,Windows 用户可以在所有 UWP 应用程序中享受 30-60% 的启动时间缩短(与 CLR 相比)。在您的开发机器上可能并不重要,但对于廉价平板电脑上的用户体验却很重要。我们目前不提供关闭 .NET Native 作为选项。

I filed an issue https://github.com/dotnet/corefx/issues/21775提高我们对 Array.Clone 的测试覆盖率,以便这种情况不会再次发生(特别是因为我们甚至不知道它已损坏)。

如果您将来遇到问题:

  • 您可以直接通过 dotnetnative(位于 microsoft com)联系开发团队
  • 您可以提交修复。 UWP 应用程序的 .NET Native 与CoreRT https://github.com/dotnet/corertGitHub 上的存储库,并且许多代码都是共享的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免 .NET Native 错误 的相关文章

  • 是否有与 posix_memalign 对应的 C++ 版本?

    当我打电话时posix memalign http man7 org linux man pages man3 posix memalign 3 html为类型的对象分配对齐的内存Foo在我的 C 代码中 我需要做一个reinterpret
  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str
  • 不区分大小写的字符串比较 C++ [重复]

    这个问题在这里已经有答案了 我知道有一些方法可以进行忽略大小写的比较 其中涉及遍历字符串或一个good one https stackoverflow com questions 11635 case insensitive string

随机推荐