使用Fluent-NHibernate配置NHibernate时触发MissingMethodException的问题
解决FluentNHibernate在.NET Core 2.2中出现的MissingMethodException(System.AppDomain.get_PermissionSet()未找到)
问题根源
你碰到的这个异常本质是FluentNHibernate版本和.NET Core 2.2不兼容导致的。.NET Core 2.2已经移除了System.AppDomain.PermissionSet这个属性,但旧版本的FluentNHibernate在执行程序集扫描(就是你代码里的AddFromAssembly或AddFromAssemblyOf<Entity>())时,会调用这个已经被移除的方法,所以才抛出了异常。注释掉这两行后跳过了扫描流程,自然就不会触发错误了。
顺便说下,AddFromAssembly和AddFromAssemblyOf<T>的作用是自动扫描指定程序集里所有的FluentNHibernate映射类(那些继承自ClassMap<T>的类),不用你手动一个个加映射,能省不少代码。
解决方案
1. 升级FluentNHibernate到兼容.NET Core的版本
这是最根本的解决办法,建议把FluentNHibernate升级到2.1.0及以上的版本——这个版本开始正式支持.NET Core。你可以通过NuGet包管理器或者命令行来更新:
# NuGet包管理器控制台命令 Install-Package FluentNHibernate -Version 2.1.0 # 或者用.NET CLI命令 dotnet add package FluentNHibernate --version 2.1.0
2. 调整程序集扫描的写法(如果升级后仍有问题)
要是升级后还是遇到类似问题,可以换一种扫描方式,避开旧的兼容逻辑:
// 把原来的AddFromAssembly(Assembly.GetExecutingAssembly())换成这个,替换成你实际的实体类 .AddFromAssemblyOf<你的实体类>()
或者干脆手动指定所有映射类(虽然麻烦但能临时解决问题):
.Mappings(m => m.FluentMappings .Add<UserMap>() .Add<ProductMap>() // 把你所有的映射类都列在这里 )
3. 卸载不必要的包
你之前装的System.Security.Permissions和System.AppDomain包其实没必要,.NET Core里没有对应的完整实现,还可能引入冲突,建议卸载它们:
# NuGet包管理器控制台命令 Uninstall-Package System.Security.Permissions Uninstall-Package System.AppDomain
内容的提问来源于stack exchange,提问作者bsmidtson
相关产品推荐
相关产品推荐

