Nhibernate не работает после обновления до версии 2.1.2
Недавно я изменил мою реализацию NHibernate с версии 2.1.0 на 2.1.2. Для отложенной загрузки я использовал реализацию LinFu, используя: NHibernate.ByteCode.Linfu.
Поскольку я перешел на последнюю версию, я получил следующую ошибку:
[SecurityException: That assembly does not allow partially trusted callers.]
NHibernate.ByteCode.LinFu.ProxyFactory..cctor() +0
При отладке я обнаружил следующую ошибку:
at NHibernate.ByteCode.LinFu.ProxyFactory..ctor()
at NHibernate.ByteCode.LinFu.ProxyFactoryFactory.BuildProxyFactory()
at NHibernate.Tuple.Entity.PocoEntityTuplizer.BuildProxyFactoryInternal(PersistentClass class, IGetter getter, ISetter setter)
at NHibernate.Tuple.Entity.PocoEntityTuplizer.BuildProxyFactory(PersistentClass persistentClass, IGetter idGetter, ISetter idSetter)
at NHibernate.Tuple.Entity.AbstractEntityTuplizer..ctor(EntityMetamodel entityMetamodel, PersistentClass mappingInfo)
at NHibernate.Tuple.Entity.PocoEntityTuplizer..ctor(EntityMetamodel entityMetamodel, PersistentClass mappedEntity)
at NHibernate.Tuple.Entity.EntityEntityModeToTuplizerMapping..ctor(PersistentClass mappedEntity, EntityMetamodel em)
at NHibernate.Tuple.Entity.EntityMetamodel..ctor(PersistentClass persistentClass, ISessionFactoryImplementor sessionFactory)
at NHibernate.Persister.Entity.AbstractEntityPersister..ctor(PersistentClass persistentClass, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory)
at NHibernate.Persister.Entity.SingleTableEntityPersister..ctor(PersistentClass persistentClass, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping mapping)
at NHibernate.Persister.PersisterFactory.CreateClassPersister(PersistentClass model, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping cfg)
at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners)
at NHibernate.Cfg.Configuration.BuildSessionFactory()
at MyApplication.SessionManager..ctor() in C:\Projects\MyApps\MyApplication\SessionManager.cs:line 75
Это из-за использования NHibernate.ByteCode.LinFu? Что я могу сделать, чтобы приложение снова заработало?
1 ответ
В тех случаях, когда у вас разные версии ссылок, например, 2.1.0 и 2.1.2, вы можете настроить.net для перенаправления вызовов со старого на новый или наоборот, используя перенаправления сборок...
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Linfu.DynamicProxy"
publicKeyToken="32cd8f1a53a4c744"
culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0"
newVersion="1.1.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Однако я не думаю, что это проблема, так как ошибка совершенно иная. т.е. исключение безопасности. "Эта сборка не допускает частично доверенных вызывающих программ", по-видимому, указывает на то, что любой запущенный процесс не имеет необходимых разрешений контекста для выполнения кода в методе "NHibernate.ByteCode.LinFu.ProxyFactory..ctor()". Возможно, вы запускаете приложение с использованием профиля клиента или в среде с частичным доверием.
У вас есть больше информации о контексте, в котором вы запускаете это приложение?