互換性は、各 .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 互換モードで実行されます。 これは、新しいバージョンの変更の多くがバイナリに影響しないことを意味します。
アプリケーションが対象とする .NET Framework のバージョンは、コードが実行されているアプリケーション ドメインのエントリ アセンブリのターゲット バージョンによって決まります。 そのアプリケーション ドメインに読み込まれた追加アセンブリはすべて、そのバージョンを対象とします。 たとえば、実行可能ファイルの場合、実行可能ファイルがターゲットとするバージョンは、そのアプリケーション ドメイン内のすべてのアセンブリが実行される互換モードです。
変更の再ターゲット
変更の再ターゲットは、新しいバージョンをターゲットにするためにアセンブリが再コンパイルされるときに発生する変更です。 新しいバージョンをターゲットにすることは、アセンブリが新しい機能を利用し、古い機能に関して互換性の問題が生じる可能性があることを意味します。
影響の分類
.NET Framework 4.8.x への移行に対する変更の再ターゲットなど、ランタイムと再ターゲットの変更について説明する記事では、個々の項目は予想される影響によって次のように分類されます。
メジャー
多数のアプリに影響を与える、またはコードを大幅に変更する必要がある重大な変更。
マイナー
少数のアプリに影響を与える変更、またはコードの軽微な変更が必要な変更。
エッジ ケース
一般的ではない非常に具体的なシナリオでアプリに影響を与える変更。
透過的
アプリの開発者またはユーザーに顕著な影響を与えない変更。 この変更により、アプリは変更を必要としません。
こちらも参照ください
.NET