2011-06-29 11 views
3

この問題は、stackoverflowとWeb全体で回答されるようですが、私の問題は異なります。私は次のセットアップを持っているとき、GAC(上司がいないと言う)を使用しない方法を理解しようとしています外部アセンブリの使用:配置されたアセンブリのマニフェスト定義がアセンブリ参照と一致しません

プロジェクトは、NHibernateはを使用し、サードパーティ製のアセンブリですAntlr3.Stringtemplate どちらも。 NHibernateの他が利用できない場合Antlr3.Runtimeバージョン3.3.1.7705

一つへの参照がエラーであろうAntlr3.Runtimeバージョン3.1.3.42154 Antlr3.Stringtemplateへの参照を持っています。

私はバインディングリダイレクトを試みましたが、バージョン間でpublicKeyTokenが異なるため、これは機能しません。 3.1.3.42154のバージョンと一致する公開鍵トークンを持つ3.3.17705を探します。

GACに1つまたは両方をインストールしてください。しかし、上司はGACに何もインストールさせません。

バージョン3.1.3.42154のフォルダを持つLibプロジェクトを含めることで、両方のDLLをBINディレクトリに入れてみました。 私は常にコピーするように言ったので、/bin/Lib/3.1.3.42154/Antlr.Runtime.dll を取得しました。次に、そのディレクトリを調べるためのプローブ要素を追加しました。 これはうまくいかず、同じエラーが発生しました。

他のサードパーティ製のアセンブリを参照するサードパーティのアセンブリを使用するにはどうすればよいですか?

UPDATE:しかし、言ってもまだエラーがthta 3.1.3を見つけることができない

System.Reflection.Assembly.LoadFile(@"Antlr3.Runtime.dll"); // 3.3.1   
    System.Reflection.Assembly.LoadFile(@"Antlr3.Runtime\Antlr3.Runtime.dll"); // 3.1.3 

AppDomain.CurrentDomain.GetAssemblies()、バージョンはアプリケーションドメインにロードされていることを示しています。

以下は、そのコードを呼び出す直前にAppDomain.CurrentDomain.GetAssemblies()から読み込まれたものです。最初の2行はGetAssemblies()のwhatsで、3行目はエラーがないということです。

{Antlr3.Runtime, Version=3.3.1.7705, Culture=neutral, PublicKeyToken=eb42632606e9261f} 
{Antlr3.Runtime, Version=3.1.3.42154, Culture=neutral, PublicKeyToken=3a9cab8f8d22bfb7} 
Antlr3.Runtime, Version=3.1.3.42154, Culture=neutral, PublicKeyToken=3a9cab8f8d22bfb7 
+0

PublicKeyTokenの不一致がそれを殺します。最新のリファレンスを使用するこれらのDLLを再構築することは、残っているすべてのものです。 –

+0

ええ、NHibernateのソースをダウンロードして、それを再コンパイルしてstringtemplateが使用するDLLを参照しようとしていました – BradLaney

答えて

1

解決済み。

これはAntlr3.StringTemplateを使用する際の特定の問題です stringtemplateを作成した人は実際にantlrのソースをダウンロードし、元のantlr dllを配布するのではなくアプリケーションで構築しました。彼の新しいantlr dllは同じ名前ですが、署名が異なります。彼はバージョンとその公開鍵トークンを変更します。あなたがNHibernateなどのものでオリジナルを使用しようとすると、それは非常に悪い競合を引き起こします。

ILMergeの解決方法は、カスタムAntlr3 DLLをstring.template DLLにマージしてstring.template DLLをそれ以外のものに依存させることでした。 Antlr3.Runtime.dll、Antlr3.StringTemplate.dll、Antlr3.Runtime.Debug.dllを1つのDLLに統合しましたAntlr3.StringTemplate.dll

これにより、すべてのDLLの競合が解消され、Antlr3を追加することができました。 nhibernateが必要とするRuntime.dll。 stringtemplateを作成する人は、この方法でもパッケージを配布しなければなりません。

関連する問題