2009-08-24 15 views
1

私はMicrosoft.Practices.EnterpriseLibrary.Common.dllを参照するDLLプロジェクトを持っている(=「DLL」)マイクロソフトエンタープライズライブラリ3.1の私のインストールディレクトリから。それは "b03f"で始まる公開鍵を持っています。
Miner.Geodatabase.dllバージョン9.30.2.5168を参照する別のプロジェクトがあります(GACフォルダに9.2.0.0が表示されます)。マイナーdllは、 "196b"で始まる公開鍵を持っています。
3番目のdllは他の2つを参照します。奇妙なDLLの行動(質問オーバーホール)

はここで上記のプロジェクト ELTest.rarとシンプルVS2005のソリューションです -
1. RefEL、ちょうどそのlibフォルダからDLLを参照します。
2. RefGeodatabseは、GACのMiner.Geodatabase.dllを参照しています。
3. RefBothは、他の2つのプロジェクトを参照します。 RefGeodatabaseとRefBothのビン/デバッグがDLLのバージョンとを含んでいながら

はコンパイル後、RefELのビン/デバッグフォルダには、「b03f」(「本物」)DLLのバージョンが含まれていますマイナーdllと同じ "196b"で始まる公開鍵。彼らはエンタープライズライブラリを再コンパイルした(そして、おそらく何かを変えた)ようだ。
実行時に(私の実際の解決策では、この偽の解決策ではない)、私の "両方の"プロジェクトは、 "b03f" dllが必要な "EL"プロジェクトを呼び出し、見つからずクラッシュします。

私は何をすることが出来るのですか?おそらく、エンタープライズライブラリのDLLをGACに登録すると、実行時に見つかるでしょう。ターゲットコンピュータにentlibをインストールする必要のない別のソリューションはありますか?

+0

使用しているVisual Studioのバージョンは何ですか?プロジェクト参照やファイル参照を使用していますか? HintPathsはプロジェクトファイルでどのように見えるのですか?あなたが記述しているようにDLLをコピーするのは完全に正常です。 –

+0

私はvs2005 sp1を使用しています(spもインストールされていなくても起こります)。プロジェクトAはEL dllをファイル(libフォルダ内)として参照していますが、** GACからは**ありません。 プロジェクトBは、GACを介してMiner.Geodatabase.dll(ver 9.30.2.5168)を参照しており、コンパイルした後、奇妙なEL dllを受け取っています。 このDLLがどこから来ているのか分かりません。しかし、AとBの両方を参照するプロジェクトはこの奇​​妙なdllを取得し、Aは実行時に失敗します。 –

答えて

0

まあ、エンタープライズライブラリの通常の( "b03f")バージョンを私のGAC(およびプロダクションコンピュータ)に登録することに決めました。私はthisリンクを使用してすべてのdllを一度に登録しました。魅力的に働いた。

さて、私のRefELプロジェクトは、DLLのGACのバージョンを参照し、RefGeodatabaseは、実行時に私のプロジェクトで、CopyLocalに= trueをGACから「196B」のバージョンを参照するMiner.Geodatabase.dllを、持っているにもかかわらず、 GACの "b03f"バージョンを見つけ、クラッシュしません。