【问题标题】:UWP: Release configuration breaks entity framework and sqliteUWP:发布配置打破实体框架和sqlite
【发布时间】:2017-12-11 11:03:07
【问题描述】:

我的构建遇到了严重的问题。我在 UWP 应用程序中使用带有 sqlite 的实体框架。在调试模式下一切正常,但是当我在发布模式下运行应用程序时,我得到了很多 sqlite/entity 框架异常:

Exception thrown: 'Microsoft.Data.Sqlite.SqliteException' in Microsoft.Data.Sqlite.dll
Exception thrown: 'Microsoft.Data.Sqlite.SqliteException' in Microsoft.Data.Sqlite.dll
Exception thrown: 'Microsoft.Data.Sqlite.SqliteException' in Microsoft.Data.Sqlite.dll
Exception thrown: 'Microsoft.Data.Sqlite.SqliteException' in Microsoft.Data.Sqlite.dll
Exception thrown: 'Microsoft.Data.Sqlite.SqliteException' in Microsoft.Data.Sqlite.dll
Exception thrown: 'Microsoft.Data.Sqlite.SqliteException' in Microsoft.EntityFrameworkCore.Relational.dll
Exception thrown: 'Microsoft.Data.Sqlite.SqliteException' in Microsoft.EntityFrameworkCore.Relational.dll
Exception thrown: 'Microsoft.EntityFrameworkCore.DbUpdateException' in Microsoft.EntityFrameworkCore.Relational.dll
Exception thrown: 'Microsoft.EntityFrameworkCore.DbUpdateException' in Microsoft.EntityFrameworkCore.dll
Exception thrown: 'Microsoft.EntityFrameworkCore.DbUpdateException' in Microsoft.EntityFrameworkCore.dll
Exception thrown: 'Microsoft.EntityFrameworkCore.DbUpdateException' in System.Private.CoreLib.dll
Exception thrown: 'Microsoft.EntityFrameworkCore.DbUpdateException' in System.Private.CoreLib.dll
Exception thrown: 'Microsoft.EntityFrameworkCore.DbUpdateException' in System.Private.CoreLib.dll
Exception thrown: 'System.InvalidOperationException' in System.Private.Threading.dll
Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll

我注意到,如果我取消选中发布配置的“优化代码”,一切都会恢复正常。编译时发生了一些事情。有人知道如何调查这个吗?

【问题讨论】:

标签: entity-framework sqlite uwp windows-10


【解决方案1】:

从描述看来,优化器很可能搞砸了一些事情。一项有趣的检查是:

  • 设置为调试配置
  • 在 DEBUG 配置中打开 .NET Native(项目 属性 > 构建 > 启用 .NET Native)
  • 构建并查看它是否重现!

此配置将禁用整个项目的优化器。如果它导致问题消失,那么它只是寻找我们遇到问题的方法/类型。如果它在 DEBUG 配置中工作但启用了 .NET Native,那么您可以通过有选择地禁用优化器来获得有效的 RELEASE 构建。以下是如何通过类型/命名空间/程序集执行此操作的示例:

  • 打开属性\Default.rd.xml
  • 地址:<Type Name=”FullyQualified.TypeName” DoNotOptimize=”true” DoNotInline=”true”/>
  • 或:<Namespace Name=”Name.Space” DoNotOptimize=”true” DoNotInline=”true”/>
  • 或:<Assembly Name=”Assembly.Name.Without.Extension” DoNotOptimize=”true” DoNotInline=”true”/>

一次禁用一个程序集可以让您取得合理的进展,而不会让自己发疯。如果该策略最终对您有用,那么您就可以开始了。当您将应用程序提交到 Store 时会出现 Default.rd.xml 文件,因此 Store 编译看起来或多或少与您的本地编译相同。

如果您确实设法缩小范围,我相信构建 .NET Native 优化器的人会很想知道更多,以便他们可以将其从编译器中剔除。可以通过 dotnetnative@microsoft.com 联系他们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2018-10-08
    • 2014-07-28
    • 2020-01-28
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多