You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:43:17