升级到3.1后,NHibernate验证器抛出System.NotSupportedException

升级到3.1后,NHibernate验证器抛出System.NotSupportedException,nhibernate,nhibernate-validator,Nhibernate,Nhibernate Validator,有人遇到过这种情况吗 升级到NHibernate 3.1后,在运行NUnit测试用例时,我从NHibernate验证器收到以下异常: System.NotSupportedException:中不支持调用的成员 动态装配。在 System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceStream(字符串 姓名)在 NHibernate.Validator.Cfg.XmlMappingLoader.AddResource(程

有人遇到过这种情况吗

升级到NHibernate 3.1后,在运行NUnit测试用例时,我从NHibernate验证器收到以下异常:

System.NotSupportedException:中不支持调用的成员 动态装配。在 System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceStream(字符串 姓名)在 NHibernate.Validator.Cfg.XmlMappingLoader.AddResource(程序集 程序集,字符串资源)位于 NHibernate.Validator.Cfg.XmlMappingLoader.GetXmlMappingFor(类型) 在 NHibernate.Validator.Engine.JITClassMappingFactory.GetExternalDefinitionFor(类型 类型)在 NHibernate.Validator.Engine.JITClassMappingFactory.GetClassMapping(类型 clazz,Validator模式)在 NHibernate.Validator.Engine.ClassValidator.InitValidator(类型clazz, IDictionary`2嵌套类验证器)位于 NHibernate.Validator.Engine.ClassValidator..ctor(clazz类型, IConstraintValidatorFactory约束ValidatorFactory,IDictionary`2 childClassValidators,IClassValidatorFactory)位于 NHibernate.Validator.Engine.StateFullClassValidatorFactory.GetRootValidator(类型 类型)在 NHibernate.Validator.Engine.ValidatorEngine.GetClassValidator(类型 entityType)在 NHibernate.Validator.Engine.ValidatorEngine.getElementNew(类型 entityType)在 NHibernate.Validator.Engine.ValidatorEngine.InternalValidate(对象 实体,对象[]activeTags)位于 NHibernate.Validator.Engine.ValidatorEngine.Validate(对象实体, 对象[]activeTags)位于 NHibernate.Validator.Event.ValidateEventListener.Validate(对象 实体,实体模式)在 NHibernate.Validator.Event.ValidatePreUpdateEventListener.OnPreUpdate(PreUpdateEvent 事件),位于中的NHibernate.Action.EntityUpdateAction.PreUpdate()处 d:\CSharp\NH\NH\nhibernate\src\nhibernate\Action\EntityUpdateAction.cs: 中NHibernate.Action.EntityUpdateAction.Execute()处的第200行 d:\CSharp\NH\NH\nhibernate\src\nhibernate\Action\EntityUpdateAction.cs: 第58行NHibernate.Engine.ActionQueue.Execute(IExecutable 可执行文件)在 d:\CSharp\NH\NH\nhibernate\src\nhibernate\Engine\ActionQueue.cs:line 136位于中的NHibernate.Engine.ActionQueue.ExecuteActions(IList列表) d:\CSharp\NH\NH\nhibernate\src\nhibernate\Engine\ActionQueue.cs:line 中的NHibernate.Engine.ActionQueue.ExecuteActions()处的126 d:\CSharp\NH\NH\nhibernate\src\nhibernate\Engine\ActionQueue.cs:line 170 at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource 会议)在 d:\CSharp\NH\NH\nhibernate\src\nhibernate\Event\Default\AbstractFlushingEventListener.cs: 第241行 NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent 事件)在 d:\CSharp\NH\NH\nhibernate\src\nhibernate\Event\Default\DefaultFlushEventListener.cs: 中NHibernate.Impl.SessionImpl.Flush()处的第19行 d:\CSharp\NH\NH\nhibernate\src\nhibernate\Impl\SessionImpl.cs:line FooTest.cs中的TestDataAccess.FooTest.TestFoo()中的1472

从堆栈跟踪中可以看到,当刷新会话并且NHibernate验证器执行其操作时,会发生错误

更新我尝试单步执行NH验证程序代码,似乎在某个点上它试图验证实体的Castle代理,而不是底层实体本身。这就造成了麻烦。不知道该怎么办


更新如果我使用LinFu ProxyFactory而不是Castle,问题就会消失。不幸的是,LinFu给了我一个代理库,所以我不想使用它。

NHibernate 3.2不再需要外部代理库

它们仍然受支持,但不再分布,默认情况下使用内部实现

你试过升级吗


更新:为了编译NH3.2的NHibernate验证器,您需要修改
NHibernateHelper
,如下所示:

public static bool IsProxyFactoryConfigurated()
{
    var f = NHibernate.Cfg.Environment.BytecodeProvider.ProxyFactoryFactory;
    return f != null;
}

有关详细信息,请参阅read

NHibernate Validator是根据3.1构建的,如果我尝试根据3.2构建它,它会出现一些编译错误。正如我所说,如果我针对LinFu代理提供程序进行构建,那么问题就会消失,而新的NH内置提供程序是基于LinFu构建的,因此我怀疑问题会消失。但是LinFu代理给我带来了其他问题,即使我们不需要Castle代理提供程序,我的理解是,如果我们愿意,我们仍然可以选择使用它。那么,这些编译错误是什么呢?我下载了NHibernate.Validator并修复了编译错误,将更改添加到了答案中。您好,谢谢,我尝试升级到3.2,然后使用NHibernate.Bytecode.DefaultProxyFactory并收到了相同的异常。