2013-07-30 10 views
10

enter image description here2つのバージョン

私は複数のプロジェクトとソリューションを持っています。 2つの異なるプロジェクトで同じアセンブリの異なるバージョンを参照する必要があります。現時点では、dllの最新バージョンのみがbinフォルダにコピーされているということが起こっています。だから、古いバージョンに依存dllがエラー

Could not load file or assembly xxxx or one of its dependencies. 
The located assembly's manifest definition does not match the 
assembly reference. 

プロジェクトに基づいて、DLLの特定のバージョンを使用するようにアプリケーションを取得する方法はありますで失敗しますか?

+11

歓迎をDLL地獄には –

+0

実行されたバージョンでdllをニーズに関する詳細な情報を提供してください。それらはすべて同じディレクトリにありますか? regasmとアセンブリキャッシュを使用できますか?小さな例やグラフは、この問題を解決するのに役立ちます。 –

答えて

3

はい、各プロジェクトに同じdllの特定のバージョンを参照させることができます。私は両方のバージョンのDLLをGACに入れることをお勧めします。あなたの参照しているプロジェクトでは、Copy Local = falseとSpecific Version = trueを設定します。

設定ファイルとassembly binding directivesを使用するとGACなしで実行できます(同じ名前のため共有DLLは同じフォルダに存在しないため)が、これはGACの主な問題の1つです解決する。だから私はそれを活用することをお勧めします。

+1

アセンブリに強い名前(=が署名されている)がある場合にのみ、GACが正しい解決策であることに言及する必要があります。 – Vadim

+0

私はアセンブリbiding指示を使用しました。それは働いた:) – developer747

+0

@ developer747:ちょうど明確にするために、私はProbing(http://msdn.microsoft.com/en-us/library/4191fzwb.aspx)のような設定の指示について話していた。私は実際にあなたの問題を解決しないので、bindingRedirectの使用について話していませんでした。 bindingRedirectを使用すると、両方のアセンブリで、必要と述べたバージョンと異なるバージョンの共有DLLが同じバージョンで使用されます。 –

0

視聴者(サーバーアプリケーション、ウェブサイト、1人のユーザーのデスクトップアプリケーション、多くのユーザーのデスクトップアプリケーションなど)に応じて、ちょっとチートして1つのバージョンを完全にホストすることができますウェブサービスやWCFサービスのような別個のアプリドメイン。例えば

、あなたのプロジェクトは、Webアプリケーションであると仮定すると:

MyWebApplication 
    - DLL reference to MyLibrary v1.0 
    - Only have internal references which use v1.0 of the library 
    - WCF proxy to http://localhost/MyWebService 

MyWebService 
    - DLL reference to MyLibrary v2.0 
    - Only have internal references which use v2.0 of the library 
+2

申し訳ありません、あなたはその質問をお読みになりましたか? – Alex

+1

@Alex質問は、アプリケーションのオーディエンスを区別するものではありません。Webアプリケーションであり、WCFサービスを追加する立場にある場合、このソリューションは機能します。これを行う必要があります正確な理由は一度。いくつかのクラスをシャッフルしなければならないかもしれませんが、おそらくいくつかのサービスラッパーを生成するかもしれませんが、サービスのドメインに1つのバージョンが必要なコードと、ウェブアプリ。シナリオによってGACは潜在的に優れていますが、これは単なる別の方法です。 –

関連する問題