16

SysCacheの現在のバージョンはNHibernate3.3で動作しないようです。web /binディレクトリのNHibernatedllを置き換え、SysCache dll(3.2で動作)はそのままにしました。これで、IISが事前バインドを実行しようとすると、SysCache dllが読み込まれ、NHibernate3.2.0.4000にバインドしようとして失敗します。

[FileLoadException:ファイルまたはアセンブリ'NHibernate、Version = 3.2.0.4000、Culture = neutral、PublicKeyToken=aa95f207798dfdb4'またはその依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULTからの例外:0x80131040)] System.RuntimeTypeHandle.GetTypeByName(String name、Boolean throwOnError、Boolean ignoreCase、Boolean ReflectionOnly、StackCrawlMarkHandle stackMark、Boolean loadTypeFromPartialName、ObjectHandleOnStack type)+0
System.RuntimeTypeHandle.GetTypeByName(String name、Boolean throwOnError、 ignoreCase、ブール値reflectionOnly、StackCrawlMark&stackMark、ブール値loadTypeFromPartialName)+95
System.RuntimeType.GetType(String typeName、Boolean throwOnError、Boolean ignoreCase、Boolean ReflectionOnly、StackCrawlMark&stackMark)+54 System.Type.GetType(String typeName)+50 NHibernate.Util.ReflectHelper.TypeFromAssembly(AssemblyQualifiedTypeName name、Boolean throwOnError)+338
NHibernate.Cfg.SettingsFactory.CreateCacheProvider(IDictionary`2プロパティ)+175

[HibernateException:CacheProviderをインスタンス化できませんでした:NHibernate.Caches.SysCache.SysCacheProvider、NHibernate.Caches.SysCache]
NHibernate.Cfg.SettingsFactory.CreateCacheProvider(IDictionary 2プロパティ)+3449 NHibernate.Cfg.Configuration.BuildSettings()+29 NHibernate.Cfg .Configuration.BuildSessionFactory()+442 properties) +256
NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary

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キャッシュのダウンロードサイトには、最新バージョンのダウンロードがありません。

4

2 に答える 2

27

別の少し簡単なアプローチは、次のように、または目的のバージョンへの参照3.2でNHibernateのバージョンへの参照をオーバーライドすることです。web.configapp.config3.3

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

私はこれを自分で試したところ、期待どおりに機能します。

于 2012-05-16T21:40:52.687 に答える
8

問題はおそらく、SysCacheDllがNHibernate3.2.0を使用して構築されており、NHibernate3.3.0と互換性がないことです。これを回避する簡単な方法は、 https: //nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernateからのみnhibernate構成プロジェクトまたはキャッシュソリューションのトランクをチェックアウトすることです。キャッシュは 、使用するNHibernate参照を更新します使用しているバージョンを再構築して、最新のキャッシュdllを使用します。マイナーアップグレードなので、コードを変更する必要はなく、安全である必要があります。

試してみて、どうなるか教えてください。

于 2012-05-08T03:21:27.447 に答える