2011-12-19 9 views
0

私は互換性のために.NET 2.0のバージョンが提供されていることを知っています。しかし、なぜいくつかのライブラリに両方のバージョンがあるのですか? .NET 4.0バージョンのライブラリを公開する理由はありますか?.NET 2.0と.NET 4.0の両方のバイナリが提供される場合、後者を使用する利点は何ですか?

例えば、Oracle.DataAccessのライブラリをとります。

+0

後者のバージョンで特定の機能を使用する予定がある場合は... (さらに、古いアセンブリは更新されず、新しいアセンブリで解決されるバグが含まれている可能性があります) – Polity

答えて

3

通常、新しいバージョンのフレームワークを対象とするライブラリのバージョンでは、正常に動作するために新しいバージョンのフレームワークが必要な新しい機能が提供されます。 .NET 2.0には、.NET 2.0にはない多くの新しい機能が導入されています。

開発者は最新のフレームワークを使用するのが好きなので、新しいコードはすべてそのフレームワークを対象に実装されます。古いバージョンのフレームワークを対象とした古いバージョンは、互換性の理由からのみ提供されています。これは、必要最小限の機能のサブセットのみを提供する可能性が高いためです。

新しいフレームワークでは、ライブラリコードのパフォーマンスやその他の改善が得られる可能性があります。これらはフレームワークの以前のバージョンにバックポートされることがありますが、しばしば最適化されていない実装であるため、必要なときにのみ使用する必要があります。

+0

一般的に、新しいバージョンの.NETの言語機能を利用する方法でAPIを公開します。 –

+0

.NET 2.0/3.0/3.5から.NET 4.0に移行するには、新しい実行時間がありました。単純にDLLを.NET 4.0に再ターゲット化して再コンパイルしただけかもしれません –

3

たとえば、Oracle.DataAccessライブラリを取ります。

これは、混在モードであるアセンブリの良い例です。 C++/CLIで記述され、マネージクラスラッパーでネイティブコードを含んでいます。データベースプロバイダは、しばしばネイティブAPIを使用してデータベースサーバと通信する必要があります。 Oracleの場合は確かです。

.NET 4.0を対象とするプログラムでこのようなアセンブリの.NET 2.0バージョンを使用することは問題です。これらのアセンブリには、属性を持つ.exe.configファイルが必要です。CLRに4.0を要求しても、そのようなアセンブリを4.0バージョンのCLRで実行できることをCLRに知らせる必要があります。属性を持たないと起動時にエラーが発生します。ドキュメントis here

あまりにも痛いです。単純な解決策は、このようなアセンブリの別の.NET 4.0バージョンを提供することです。

関連する問題