【问题标题】:UWP: Access violation happens only in release modeUWP:访问冲突仅在发布模式下发生
【发布时间】:2019-07-28 17:19:02
【问题描述】:

我是 UWP 的新手。我刚刚移植了一个相当复杂的 WPF 应用程序。我花了几个星期才弄清楚每一个差异并重构了很多代码。但是,当我开始构建并在发布模式下运行时,我得到了访问冲突异常。

这怎么可能?调试和发布执行不应该是一样的吗?如果仅在发布中出现此问题,我该如何调试?

如果我关闭本机编译,则发布版本可以正常运行。但是,当我尝试在设备上安装它时,需要一个 NetCore 2.2 调试框架。这个调试框架是什么?为什么没有它我不能运行我的发布代码?

我曾经为 AspNetCore 开发,这些东西甚至可以在 Linux 上运行。我真的不明白如果没有特殊的调试框架,UWP 应用程序如何无法在 Windows 10 平板电脑上运行。

我有点迷失在这里。非常感谢任何帮助或指导。谢谢

编辑:

至于结论:我需要从头开始重新创建应用程序。我开始逐级复制旧应用程序中的所有内容。值得付出努力,不仅因为我重构了很多代码 :),而且终于找到了导致崩溃的原因。我的一个库依赖于旧版本的 System.ServiceModel.Primitives NuGet 包。在 Debug 构建中,即使使用 Native Compilation,运行时也设法解析包。但是,在 Release 中却不能。

这是一段让我开发更好软件的旅程。但是,我可以通过从一开始更频繁地发布来避免它,或者如果运行时会显示有关程序集解析问题的更多信息错误消息。

【问题讨论】:

  • 尝试删除 bin 和 obj 构建目录,让项目重新构建。值得一试
  • 谢谢@JasonRoner 我已经做到了。没有帮助。我需要在某个地方找到一些缺失的 NULL 检查。
  • 只是为了确定,你能检查一下这个方法是否解决了你的问题吗?因为它对我来说看起来像是一个 .Net 本机编译器问题。 stackoverflow.com/a/54090790/7418444
  • @Littledoe,谢谢你的建议。包括 Microsoft.Net.Native.Compiler 包部分解决了这个问题。 Release 的编译在 3 分钟内完成,没有任何错误。但是我无法在我的笔记本电脑上运行该应用程序 - 它没有做任何事情。稍后我将在实际设备上进行尝试。谢谢

标签: .net-core uwp release


【解决方案1】:

.NET Native 编译容易给应用程序带来问题,建议在发布模式下尝试频繁运行应用程序,以尽快发现潜在问题。通常任何与反射相关的代码都应该检查好,因为这些通常是问题的根源。

我建议您及时返回(如果您有某种源代码控制)并尝试使用较早版本的应用来确定应用停止工作的时间。或者,您可以尝试注释掉部分代码,直到发布版本开始工作。最后,也可以创建一个空白项目,依次复制代码运行,定位问题。

.NET Native 是 UWP 应用程序开发的一个令人讨厌的方面,Microsoft 意识到了这一点 - 计划是 .NET Native 将不再需要(很可能在 .NET 5 到来之前),稍后会有更多可预测的替换。

【讨论】:

  • 感谢您澄清情况。这相当不方便,但是如果我知道这种情况,在开发过程中不断构建发布会比在最后面对这样的问题更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多