2012-05-08 11 views
16

現在のバージョンのSysCacheはNHibernate 3.3では動作しません。私はweb/binディレクトリのNHibernate dllを置き換え、SysCache dll(3.2で動く)をそのまま残しました。 IISが事前バインドを実行しようとすると、SysCache DLLがロードされ、Hibernate 3.2.0.4000にバインドしようとして失敗します。NHibernate 3.3とSysCache

[FileLoadException:ファイルまたはアセンブリをロードできませんでした 'NHibernateは、 バージョン= 3.2.0.4000、カルチャニュートラル、PublicKeyToken = = aa95f207798dfdb4' またはその依存関係の1つ。見つかったアセンブリのマニフェスト定義 がアセンブリ参照と一致しません。 (HRESULTからの例外: 0x80131040)] System.RuntimeTypeHandle.GetTypeByName(文字列名、 ブールthrowOnError、ブールignoreCaseは、ブールreflectionOnly、 StackCrawlMarkHandle stackMark、ブールloadTypeFromPartialName、 ObjectHandleOnStack型)+0
System.RuntimeTypeHandle.GetTypeByName(文字列名前、ブール throwOnError、ブールignoreCaseは、ブールreflectionOnly、 StackCrawlMark & stackMark、ブールloadTypeFromPartialName)95
System.RuntimeType.GetType(文字列型名、ブールthrowOnError、 ブールignoreCaseは、ブールreflectionOnly、StackCrawlMark & stackMark) +54 System.Type.GetType(文字列型名)50 NHibernate.Util.ReflectHelper.TypeFromAssembly(AssemblyQualifiedTypeName 名、ブールthrowOnError)338
NHibernate.Cfg.SettingsFactory.CreateCacheProvider(IDictionary`2 プロパティ)175

[HibernateExceptionでは:のcacheProviderをインスタンス化できませんでした: NHibernate.Caches.SysCache.SysCacheProvider、 NHibernate.Caches.SysCache]
NHibernate.Cfg.SettingsFactory.CreateCacheProvider(IDictionaryを2 properties) +256
NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary
2特性) 3449 NHibernate.Cfg.Configuration .BuildSettings()+29 NHibernate.Cfg.Configuration.BuildSessionFactory()+44

私はweb.configファイルで設定をコメントアウトした場合、すべてが順調です:

<property name="cache.use_second_level_cache">true</property> 
<property name="cache.use_query_cache" >true</property> 
<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property> 

NHibernate ContribでNHibernateのキャッシュ用ダウンロードサイトには、最新バージョンのダウンロードを持っていません。

+0

FLuent Nhibernateを使用していますか? – Baz1nga

答えて

8

おそらく問題は、SysCache DllがNHibernate 3.2.0を使用して構築されており、NHibernate 3.3.0と互換性がないことです。これを回避する簡単な方法は、nhibernate設定プロジェクトまたはキャッシュソリューションのトランクをチェックすることです。https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Caches 最新のキャッシュDLLを使用しているバージョンを使用するようにNHibernateのリファレンスを更新してください。マイナーなアップグレードが必要なので、コードの変更は必要ありません。あなたは安全でなければなりません。

どうぞお試しください。

+0

実際、トランクのプロジェクトは3.0を参照しています。だから私が3.2で動いていたライブラリは、このソースから直接コンパイルされていてはいけません。とにかく、私はそれをダウンロードして問題なく再コンパイルしました。提案していただきありがとうございます。 –

27

若干異なると単純なアプローチがそうのような目的のバージョン3.3を参照して、あなたのweb.configapp.configでNHibernateはの3.2バージョンへの参照を無効にすることです:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="NHibernate" culture="neutral" publicKeyToken="aa95f207798dfdb4" /> 
     <bindingRedirect newVersion="3.3.0.4000" oldVersion="0.0.0.0-3.3.0.4000" /> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

私はこれを試してみました自分自身と期待どおりに動作します。

関連する問題