我在ASP.Net项目中使用Fluent NHibernate。在我的机器上一切正常,当我将项目发布到托管服务器时,我遇到了一些问题。
以下是我使用的代码:
try { var db = MsSqlConfiguration.MsSql2008.ConnectionString(_connStr); _sessionFactory = Fluently.Configure() .Database(db) .Mappings(c => c.FluentMappings.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly())) .ExposeConfiguration(c => c.SetProperty("hbm2dll.keywords", "auto-quote")) .BuildSessionFactory(); } catch (Exception ex) { _log.Error("Error during session factory initialization. Error message: " + ex.Message); _log.Error("Full Error Details: " + ex.ToString()); return false; }
当我在托管服务器上运行上述代码时,我收到以下错误:
01/12/2015 12:07:35:585 - 错误:会话工厂初始化期间出错。 >错误消息:覆盖成员时违反了继承安全规则:>' FluentNHibernate.Cfg.FluentConfigurationException.GetObjectData(System.Runtime> .Serialization.SerializationInfo,> System.Runtime.Serialization.StreamingContext)' 。 >覆盖方法的安全性可访问性必须与>覆盖方法的安全性可访问性相匹配。
01/12/2015 12:07:35:585 - 错误:完整错误详细信息:System.TypeLoadException:>重写成员时违反了继承安全规则:>' FluentNHibernate.Cfg.FluentConfigurationException.GetObjectData( System.Runtime> .Serialization.SerializationInfo,> System.Runtime.Serialization.StreamingContext)'。 >覆盖方法的安全性可访问性必须与>覆盖方法的安全性可访问性相匹配。 在FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() 在CDataAccessLayer.cs中的NIPDBHandler.CDataAccessLayer.Init():第32行
现在我知道方法中的Fluent NHiberate存在一个已知问题" FluentNHibernate.Cfg.FluentConfigurationException.GetObjectData"在.NET 4.0中。基本上,问题是所提到的方法没有用属性" [SecurityCritical]"来装饰。我100%确定所述方法是用所述属性修饰的。我使用FluentNHibernate版本2.0.1.0并且我使用ILSpy来检查方法是否真的装饰好了,事实上,它是用" [SecurityCritical]"属性。
我还尝试将以下行添加到FluentNHibernate的汇编文件中并重新编译所有内容。 隐藏复制代码 [assembly:System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]
这一次,我看到的唯一区别是配置需要很长时间才能完成,导致.aspx页面出现ThreadBeingAborted异常。
任何帮助都会非常感激,因为老实说,我不知道自己做错了什么。
提前致谢!