.NET Framework のアプリケーションの互換性

.NET Framework の各リリースにおいて、互換性は重要な目標です。 各バージョンが付加的な場合は互換性が確保され、以前のバージョンも引き続き動作します。 一方、以前の機能に変更が生じた場合 (パフォーマンスの向上、セキュリティ上の問題の解決、またはバグの修正などを目的とした)、既存のコードまたは既存のアプリケーションを以降のバージョンで実行すると互換性に問題が発生する可能性があります。

各アプリは、.NET Framework の特定のバージョンをターゲットとします。バージョンを特定する方法は次のとおりです。

  • Visual Studio でターゲット フレームワークを定義する。
  • プロジェクト ファイルでターゲット フレームワークを指定する。
  • TargetFrameworkAttribute をソース コードに適用する。

.NET Framework のあるバージョンを別のバージョンに移行する場合、考慮する変更には、次の 2 種類があります。

ランタイムの変更

ランタイムの問題とは、コンピューターに新しいランタイムを配置し、アプリの動作が変更された場合に発生する問題です。 ターゲットに指定されたバージョンより新しいバージョンでアプリが実行されると、.NET Framework は後方互換動作によって、ターゲットに指定されている古いバージョンを模倣します。 アプリは新しいバージョンで実行されますが、古いバージョンで実行される場合と同様に動作します。 .NET Framework のバージョン間の互換性の問題の多くは、この後方互換モデルを通して対応されます。 たとえば、.NET Framework 4.0 向けにコンパイルされたバイナリを、.NET Framework 4.5 以降がインストールされたコンピューターで実行する場合、.NET Framework 4.0 互換モードで実行されます。 つまり、4.5 以降のバージョンの変更の多くは、そのバイナリには影響しません。

アプリケーションがターゲットとする .NET Framework のバージョンは、コードが実行されるアプリケーション ドメインのエントリ アセンブリのターゲット バージョンによって決まります。 そのアプリケーション ドメインに読み込まれたすべての追加アセンブリは、そのバージョンをターゲットとします。 たとえば、実行可能ファイルの場合、実行可能ファイルのターゲットとなるフレームワークは、そのアプリケーション ドメイン内のすべてのアセンブリが実行される互換モードになります。

変更の再ターゲット

再ターゲットの変更とは、アセンブリを再コンパイルして新しいバージョンをターゲットとする場合に生じる変更です。 新しいバージョンにターゲットするということは、アセンブリで新しい機能が選択されるだけでなく、古い機能との互換性の問題が発生する可能性があることも意味します。

影響の分類

ランタイムおよび再ターゲットの変更について説明する記事 (たとえば、「.NET Framework 4.8.x への移行に関する変更の再ターゲット」) では、個々の項目を、次のような予想される影響別に分類しています。

メジャー
多数のアプリに影響するか、またはコードに大幅な変更が必要な、重大な変更。

Minor
少数のアプリに影響するか、コードにわずかな変更を加える必要がある変更。

エッジ ケース
一般的ではない特定のシナリオでアプリに影響を与える変更。

透明
アプリの開発者やユーザーには大きな影響を及ぼさない変更。 アプリはこの変更のために変更を加える必要はありません。

関連項目