UWP:发布配置中断实体框架和sqlite

时间:2017-07-07 08:16:10

标签: entity-framework sqlite uwp windows-10

我的构建遇到了严重问题。我在UWP应用程序中使用带有sqlite的实体框架。在调试模式下一切正常,但是当我在发布模式下运行app时,我得到了很多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

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

1 个答案:

答案 0 :(得分:1)

从描述中看,很可能优化器已经拙劣了。一个有趣的检查是:

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

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

  • 打开Properties \ 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与他们联系。