在 DEBUG
中执行 UWP 应用程序完美无缺。
使用在 RELEASE
中编译的完全相同的代码会崩溃并显示此错误消息
System.PlatformNotSupportedException:
'Dynamic code generation is not supported on this platform.'
执行此代码时(它使用 Dapper 1.5.1
和 System.Data.SQLite 1.0.109.2
)
using (var c = NewConnection())
{
var sql = @"
update settings
set
""value"" = @SetDate
where ""key"" = 'week_date'";
c.Execute(sql, new { SetDate = date }); //<= throws PlatformNotSupportedException
// only on RELEASE not in DEBUG
}
应用程序是 UWP 配置如下。此外,错误代码是 .NET Standard 2.0
Class Library
为什么它仅在 RELEASE
时崩溃,如何修复?
最佳答案
Dapper 非常深入地基于运行时 IL 生成,基本上无法更改。运行时 IL 生成基本上与 UWP 不兼容。
没有简单的方法可以完成这项工作。
因此:要做到这一点,您需要使用类似小巧但不 Dapper 东西,并使用两种替代实现之一:
- 基于反射的绑定(bind)(相对较慢,具体取决于您访问的数据量)
- 编译时代码生成 缺失部分,大概使用某种 roslyn 分析和部分类生成
也许现在,更务实的方法是:在这种情况下不要使用 dapper。
关于c# - 将 Dapper 与 WP 一起使用时抛出 PlatformNotSupportedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54184301/