3

私が取り組んでいるプロジェクトでは、NHibernate 用の Mysql コネクタ (Mysql.Data.dll) を使用する必要があります。同じプロジェクト内の別のプロジェクト (Migrator.NET) も参照したいと考えています。問題は、Migrator.NET が特定のバージョン = false の MySql.Data への参照を使用してビルドされているにもかかわらず、そこにあるバージョンを使用するだけでなく、ライブラリがビルドされた MySql.Data の古いバージョンを参照しようとすることです。 ..そして、タイトルにリストされている例外を取得します:

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

メイン アセンブリで参照しているバージョンは 6.1.3.0 です。2 つのアセンブリを連携させるにはどうすればよいですか?

編集:

アセンブリ バインディング リダイレクトを指定している方のために、次のように設定しました。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-6.1.3.0" newVersion="6.1.3.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

これを別のプロジェクトのメイン アセンブリで参照していますが、それでも同じエラーが発生します。メイン アセンブリをローカルにコピーして他のアセンブリで使用する場合、app.config の設定を使用しますか?それとも、メイン アセンブリを参照するすべてのアプリケーションまたはアセンブリにこの情報を含める必要がありますか?

4

5 に答える 5

3

アセンブリバインディングリダイレクトを探しています。

これにより、別のアセンブリバージョンを探すようにアプリケーションを構成できます。

于 2010-02-17T20:15:31.053 に答える
2

これはかなり大きなバージョンの不一致です。バージョンが大きく異なる場合、bindingRedirectは役に立ちません。あなたはそれを間違えました、あなたはnewVersionが見つかったものと一致することを望みます。しかし、そこには行かないでください。

Migrator.NETのダウンロードを見ると、問題が発生していると思います。libフォルダーには、非常に古いバージョンのMySql.Data.dllが含まれており、.NET1.0で実行できるようになっています。それをザッピングすることから始めて、そのアセンブリのバージョン6で再構築してみてください。頑張ってください、私はあなたがそれを必要とするだろうと思います。

于 2010-02-17T20:33:52.330 に答える
1

アセンブリの両方のバージョンがある場合、1 つのオプションは、それらを並べて使用し、適切な場所で検索するようにアプリケーションを構成することです。app.config にいくつかの行を追加することでこれを行うことができますが、私にとって最も信頼できる方法は、常にAppDomain.AssemblyResolveイベントに登録し、必要なライブラリのパスを提供することでした。

簡単な例については、こちらをご覧ください(あまり関係のない質問に対する回答ですが、同じ手法を使用しています;))

于 2010-02-17T20:17:56.273 に答える
1

簡単な解決策は、Migrator.NET プロジェクトから Mysql.data.dll (古い MySql バージョンを参照する) 参照を削除し、新しい参照 MySql.data.dll (別のプロジェクトで使用されている同じバージョン) を追加することです。Migrator.NET を再度ビルドすると、すべて正常に動作するはずです。私は同じ問題に直面していましたが、私が言及した解決策は私にとって完璧に機能しました

于 2010-03-11T18:04:51.883 に答える
-1

私も同じ問題に直面していて、上記の解決策のいずれでも解決できませんでした。それで、ついに私はこれに対するもう1つの解決策を見つけました...ソリューションエクスプローラーのproject=>Propertiesのlicense.licxファイルからすべてを削除します。

このファイルからすべてを削除すると、プロジェクトを正常にビルドできるようになります

于 2012-04-19T06:12:35.270 に答える