2012-04-02 16 views
1

.NET 3.5向けに作成されたソフトウェア用のプラグインを作成します。このプラグインでは、.NET 3.5で動作するサードパーティの.DLLを参照しています。主なソフトウェアは現在.NET 4.0に組み込まれており、サードパーティの.DLLは2つの.DLLに分割されています。アセンブリの解決

私たちが避けたいのは、ほぼ同じコード(4.0 DLLを参照する.NET 4.0に構築されたコードと3.5 DLLを参照する3.5に構築されたコード)を持つ2つの別個のソリューションがあることです。すべてのお客様がすぐにプラグインを作成する最新バージョンのソフトウェアにアップグレードするわけではなく、一部のソフトウェアは数年待つかもしれません。 EDITED

QUESTION:

は3.5 DLLを参照する.NET 3.5に構築し、その後、実行時に所定の位置に2 .NET 4.0のDLLをロードするために、いくつかのアセンブリの決意を実行するために継続するどのような方法があります元のものの?

以前のバージョンのメインソフトウェアがプラグインをロードし続けるように、3.5フレームワークへの構築を継続したい/したい。 4.0にビルドすると、古いバージョンは、後のフレームワークにビルドされるため、プラグインをロードしようとするとエラーが発生します。

+1

実際にこれを試したことがありますか、それとも問題があるかもしれないと推測していますか?もしあなたがしたのであれば、*正確に*はエラーメッセージですか? –

+0

ソフトウェアの古いバージョンで4.0プラグインをロードしようとすると、次のエラーが表示されます。 アセンブリをロードできません。エラー詳細:System.BadImageFormatException: ファイルまたはアセンブリをロードできません 'file:/// C:\ Users \ ******* \ Documents \ Visual Studio 2010 \ Projects \ RandomProjects \ A2013テスト\ bin \ Debug \ A2013Testing.dll 'またはその依存関係の1つ。このアセンブリは、現在ロードされているランタイムより新しいランタイム によって構築され、ロードできません。 ファイル名: 'file:/// C:\ Users \ ******* \ Documents \ Visual Studio 2010 \ Projects \ RandomProjects \ A2013Testing \ bin \ Debug \ A2013Testing.dll' at System.Reflection –

答えて

1

このアセンブリは、クリスタルクリアだ現在ロードされてランタイム

より新しいランタイムによって構築されている、あなたのEXEは、CLRの以前のバージョンをロード。 CLRの.NET 4バージョンのみが、ターゲット4に構築されたアセンブリをロードする方法を知っています。メタデータ形式は4で変更されました。古いCLRは、それを読み取る方法を認識していません。

EXEをターゲット4に再構築するか、プログラムを新しいバージョンのCLRで実行するapp.exe.configファイルを用意してください。 .NET 4は非常に互換性があり、

<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 

いくつかのテストが必要になるが、それはあなたが誤って頼るかもしれないいくつかのバグフィックスを持っている:それは次のようになります。

+0

実行可能ファイルではありません。実行可能ファイルはDLLをロードしようとしています。実行可能ファイルは4.0で構築され、以前の実行可能ファイルは3.5で構築されています。 DLLを両方のDLLと互換性を持たせようとしています。 4.0実行可能ファイルは3.5 DLLを正常に読み込みますが、3.5 DLLはこのバージョンのサードパーティ4.0リファレンスと以前のバージョンの3.5 DLLを参照する必要があります。 –

+0

EXEのみがロードされるCLRのバージョンを決定します。最初に始まるからです。この例外が発生した場合、問題を引き起こすのはEXEであることを確認できます。 3.5をターゲットにしてビルドされています.4.0のDLLをロードする唯一の方法は、EXEにCLRバージョン4をロードさせることです。ターゲット4またはこの.exe.configファイルにビルドする必要があります。これを整理するためにEXEの所有者と話をする必要があるかもしれませんが、必ずしもそれを喜ばないかもしれません。 –

0

構造がまったく同じ場合(どちらも1つのアセンブリ)、.NET 4ランタイムで.NET 3.5ライブラリをロードする際に問題はありません。 (私はVS2010上に構築するのが怠惰なので、私はIronSchemeでこれをたくさん行います)。

+0

私は十分に明確ではなかった、私は質問を編集した。ありがとう。 –

関連する問題