Tag: .net native

避免.NET Native bug

我花了去年(兼职)将我现有的(并且成功的)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.”; } 在调试模式下,克隆2D数组意味着修改一个数组项不会影响另一个数组。 在释放模式下,修改一个arrays也会改变另一个arrays。 (我正在使用最新的VS 2017.) 现在,我意识到使用.NET Native 1.6(这不是VS 2017中的默认设置),解决了这个特殊问题。 但我失去了对.NET Native的信心。 .NET Native仍然在我的应用程序中引入了多少错误? […]

如何正确读取/解释原始C#堆栈跟踪?

我正在从UWP应用程序(C#,使用.NET Native编译)中读取一些崩溃报告,并且我很难理解堆栈跟踪中使用的确切语法/格式。 我试着在互联网上寻找一些指南,但我没有想出任何有用的东西。 这里有一些例子: 1) MyProject.ViewModels.SomeViewModel.d__69.MoveNext() SomeViewModel是SomeViewModel方法的名称,为什么它在尖括号内呢? 是”ClassName”….”指示实例方法的常用方法吗? 据我所知,C#编译器将await调用之间的每一块代码转换为匿名方法,并使用continuation调度它们,所以我猜d__69表示当前方法中的异步延续。 ‘d’代表什么? 这些数字是随机的吗? 我的意思是,该方法没有69 await调用,所以我猜这些数字不是顺序的。 是否有可能从堆栈跟踪中的该数字中找出原始方法中的确切部分? 最后的MoveNext()方法是什么? 它需要什么样的类型? 2) MyProject.UserControls.SomeControl.b__0_0 我知道.ctor代表对象构造函数,并查看我发现的代码, b__0_0代表在构造函数中添加的匿名事件处理程序,如下所示: SomeEvent += (s, e) => Foo(); 。 ‘b’代表什么? 为什么有两个带下划线的数字? 其中哪一个指的是匿名方法索引? 我的意思是,它是第一个(所以它的索引是0)但这里有两个0。 如果是第二次,我会有1_0还是其他什么? 3)我有这个方法: // Returns a Task that immediately throws when awaited, as soon as the token is cancelled public static Task GetWatchedTask(this Task awaitableTask, […]

UWP – .NET本机工具链编译错误

我开发了一个简单的小型通用Windows应用程序,它使用EF7和SQLite。 当取消选中 “使用.NET Native工具链编译 ”选项时,它可以编译并顺利运行。 如果我选中 “使用.NET Native工具链编译 ”选项 ,则会出现以下编译错误: 错误类型’System.MarshalByRefObject’未包含在编译中,但在“Microsoft.Data.Entity.Design.OperationExecutor”类型中引用。 可能有一个组装缺失。 在此之后还有很多其他错误,但我相信解决这个错误也会照顾其余的错误。 有谁知道如何解决这个问题?

使用.Net native在发布模式下编译UWP应用程序时出现内存不足错误

我有一个解决方案,我的主项目是一个uwp应用程序,以及该应用程序引用的另外两个项目: UWP App —>参考文献2。 通用类库—->参考文献3。 PCL图书馆 2 – >使用EF7和SQLight。 3 – >使用PCLCrypto 现在,当我在调试模式x86上定位本地机器时,一切正常并且非常好。 我想使用.Net native tool chain在发布模式下编译解决方案,这是我的配置: 当我启动编译时,它需要相当长的时间,并且.Net本机工具消耗了太多内存: 过了一段时间,一切都停止在visual studio上出现2个错误: 这是输出窗口所说的内容: 1> —— Build build:项目:ServerCommunication,配置:释放任何CPU —— 1> ServerCommunication – > C:\ Users \ aymen \ Documents \ Visual Studio 2015 \ Projects \ Applinova \ Liberte \ ServerCommunication \ bin \ Release \ ServerCommunication.dll 2> […]

在.Net native中的线程池上运行异步任务的性能很差

我发现托管vs .Net本机代码有一个奇怪的区别。 我有一个繁重的工作重定向到线程池。 当在托管代码中运行应用程序时,一切都运行顺畅,但是一旦我打开本机编译 – 任务运行速度慢几十倍,以至于它挂起UI线程(我猜CPU是如此过载)。 以下是调试输出的两个屏幕截图,左侧的屏幕截图来自托管代码,右侧的屏幕截图来自本机编译。 正如您所看到的,UI任务所消耗的时间在两种情况下几乎相同,直到启动线程池作业时 – 然后在托管版本中UI经过的时间增长(实际上UI被阻止而您无法采取任何操作)。 线程池工作的时间不言自明。 重现问题的示例代码: private int max = 2000; private async void UIJob_Click(object sender, RoutedEventArgs e) { IProgress progress = new Progress((p) => { MyProgressBar.Value = (double)p / max; }); await Task.Run(async () => { await SomeUIJob(progress); }); } private async Task SomeUIJob(IProgress progress) { Stopwatch watch […]