web-dev-qa-db-ja.com

NHibernateでファイルまたはアセンブリを読み込めませんでした

に次の行がなかったため、最近hibernate.cfg.xmlファイルで問題が発生しました。

<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>

これが修正されたので、次のエラーが発生します。

ファイルまたはアセンブリ 'NHibernate、Version = 2.1.0.4000、Culture = neutral、PublicKeyToken = aa95f207798dfdb4'またはその依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)

なぜこのエラーが発生し、どうすれば修正できますか?

15
GaryDevenay

これらのファイルは、参照ファイルNHibernate.dllと同じディレクトリにある必要があります。

  • Antlr3.Runtime.dll
  • Iesi.Collections.dll
  • log4net.dll
  • Castle.Core.dll
  • Castle.DynamicProxy2.dll

また、参照を追加するか、これもコピーする必要があります。

  • NHibernate.ByteCode.Castle.dll
14
josemrb

今後の参考として:同じ問題が発生している場合 Randy Klingelheber 指摘(NHibernateFluentNHibernateの間の依存関係の問題、またはその他の依存ライブラリ) app.configで古いバージョンを対象とするアセンブリのリダイレクトを指定できます。これにより、依存するアセンブリを再コンパイルする必要がなくなります。

<runtime>
  <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" />
      <bindingRedirect oldVersion="3.0.0.3001" newVersion="3.0.0.4000" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

このコードは、古いバージョン(私の場合は3.0.0.3001)のリクエストを、実際に使用されているバージョン(3.0.0.4000)にリダイレクトします。 publicKeyTokenはエラーメッセージに含まれています。

6
Markus Bruckner

最近NHibernateを2.1にアップグレードしたと思いますか?

もしそうなら、私の推測では、NHibernateのさまざまなバージョンを参照するさまざまなプロジェクトがあります。

これは私に起こり、あなたが思っているよりも追跡するのが難しいです。

これらは私がそれを解決するために取ったステップです:

  1. プロジェクトのすべてのbinディレクトリにあるすべてのファイルを削除します。通常、Clean Solutionはこれに適していますが、そうではありません。コマンドライン呼び出しまたは手動で行う必要がある場合があります。
  2. すべての.csprojファイルを編集します。テキストエディタで編集するか、プロジェクトのアンロードを実行してから.csprojファイルを編集します。
  3. すべてのHintPathノードが同じ(新しい)バージョンのDLLを指していることを確認してください

それはうまくいけばあなたのためにこの問題を解決するでしょう。

5
CubanX

私もこの問題を抱えていました。

私にとっての問題は、FluentNHibernateがプロジェクト(2.1.2.4000)に含めていたものとは異なるバージョンのNHibernate(2.1.0.4000)を期待していたことでした。各ライブラリの最新リリースを個別にダウンロードして、これに遭遇しました。

この問題を修正するために、NHibernateの参照を変更して、FluenNHibernate 1.0 RTM(2.1.0.4000)に付属の古いバージョンのNHibernateを指すようにしました。

別の解決策は、app.configファイルからアセンブリバインディングを明示的に設定することです。

4

私の場合、「Clean Solution」、続いて「RebuildSolution」で問題が解決しました。

3
Tom Bushell

最近、プロジェクトを1.0 RTMバージョンのFluentNHibernateでアップグレードしました。これには、最新のNHibernateビットが必要でした。これにより、同じ問題が発生しました。

私たちのプロジェクトの構造は次のようなものでした。

Repository root
    Solution
        Web
            References
                DataAccess
        ... other projects/layers ...
        DataAccess
            References
                ..\ReferenceAssemblies\NHibernate.dll
                ..\ReferenceAssemblies\FluentNHibernate.dll
    ReferenceAssemblies

(すべての外部DLLはReferenceAssembliesディレクトリにあります。)

問題を解決するための私の最初の試みは、DataAccessプロジェクトにNHibernate.ByteCode.Castle.dllへの参照を追加することでした。これは機能しました...しかし開発中のみ...

Webアプリケーションを顧客受け入れテストサーバーに公開したとき(これは TeamCity とaspnet_compiler.exeの呼び出しを含むスクリプトの助けを借りて自動的に行われます)、NHibernate.ByteCode.Castle.dllはどこにもありませんでした見つけられる。

whyこれが起こっているかどうかはわかりませんが、アプリケーション内のどのコードもその特定のdll内のコードを実際に呼び出さないという事実と関係があるのではないかと思います。また、NHibernate.dllからNHibernate.ByteCode.Castleへのハードコードされた参照がないため(間違っている場合は訂正してください)、(おそらく未使用の)dllが見落とされています。

2番目の(そして成功)試行は、欠落しているdllへの参照をWebプロジェクトに直接追加することでした。これで、最初の試行で追加した参照を問題なく削除できました。

(私はその特定のプロジェクトでそのような参照を持つのは特に好きではありませんが、ちょっと!):-)

2

NHibernateを3.0にアップグレードし、SpringをNH 3.0を使用するナイトリービルドにアップグレードした後、この問題が発生しました。問題は、Spring.Data.NHibernate30.dllが古いバージョンのNHibernate.dll(v 3.0.0.2002)を参照していて、v3.0.0.4000を使用していたことでした。

私の解決策は、プロジェクトSpring.Data.NHibernate30ソースを開き、古いバージョンのNHibernateへの参照を削除し、バージョン3.0.0.4000への参照を追加し、再構築して、プロジェクトにこの(新しくビルドされた)バージョンのSpring.Data.NHibernate30への参照を追加することでした。 .dll。

1
dabor

私はちょうどこれを私に起こさせました-私の場合、これはNHibernate(およびFluent NHibernate)を試すのは初めてでした。アプリケーションのほとんどを、別の実行可能アセンブリによって参照される.dllアセンブリに実装しました。 NHibernateへの直接参照がない実行可能ファイルでエラーが発生しました。

NuGetを使用してFluentNHibernateをプルダウンしているので、実行可能アセンブリにもFluentNHibernate参照を追加しました。あまりクリーンではありませんが、依存関係を.binフォルダーに取得し、エラーを解決します。 (NLogのような他のライブラリでは起こらないのはおかしいです(そうですか?))

1
Luke Winikates

私は同じ問題に直面していました。 「インターネット一時ファイル」をクリアしたところ、この問題は解決しました。

1
Bhoomi

おそらく、NHibernateDLLの2つの異なるバージョンを参照するコードがあります。 NHibernateでダウンロードするNHibernate.dllは、たとえばCastleActiveRecordでダウンロードしたものとは異なるバージョンである可能性があります。 NHibernate.ByteCode.Castleに付属しているNHibernate DLLのバージョンだけを使用するようにしてください。また、NHibernate DLL(DLL $ ===( GAC内の任意のバージョン)(少なくともこの問題が解決されるまで)。

1
Michael Maddox

ソリューションにはさまざまなプロジェクトがある可能性があります。これらのプロジェクトは、NHibernate.dllの異なるバージョンを参照している可能性があります。すべてのプロジェクトのバージョンを確認し、プロジェクトを再構築します

0
NoloMokgosi

NHibernateには、nhibernate.dll以外のアセンブリがいくつかあります。それらすべてを(同じリリースから)持っていましたか?

0
o.k.w

依存アセンブリ(「NHibernate.ByteCode.Castle」だと思います)を参照し、それらの「copylocal」属性をtrueに設定する必要があります。

0
Meidan Alon