下位互換性とは、特定のバージョンのプラットフォーム用に開発されたアプリが、そのプラットフォームの新しいバージョンで実行されることを意味します。 .NET Framework は下位互換性を最大化しようとします。.NET Framework の 1 つのバージョン用に記述されたソース コードは、新しいバージョンの .NET Framework でコンパイルする必要があり、1 つのバージョンの .NET Framework で実行されるバイナリは、新しいバージョンの .NET Framework でも同じように動作する必要があります。
アプリのバージョン互換性
既定では、アプリはビルドされた .NET Framework のバージョンで実行されます。 そのバージョンが存在せず、アプリ構成ファイルでサポートされているバージョンが定義されていない場合は、.NET Framework 初期化エラーが発生する可能性があります。 この場合、アプリの実行は失敗します。
アプリを実行する特定のバージョンを定義するには、1 つ以上の <supportedRuntime> 要素をアプリの構成ファイルに追加します。 各 <supportedRuntime>
要素には、サポートされているバージョンのランタイムが一覧表示され、最初に最も優先されるバージョンが指定され、最後に最も優先されるバージョンが指定されます。
<configuration>
<startup>
<supportedRuntime version="v2.0.50727" />
<supportedRuntime version="v4.0" />
</startup>
</configuration>
詳細については、「 方法: .NET Framework 4 または 4.x をサポートするようにアプリを構成する」を参照してください。
コンポーネントのバージョン互換性
アプリは実行する .NET Framework のバージョンを制御できますが、コンポーネントでは制御できません。 コンポーネントとクラス ライブラリは、特定のアプリのコンテキストで読み込まれるので、アプリが実行されている .NET Framework のバージョンで自動的に実行されます。
この制限のため、互換性の保証はコンポーネントにとって特に重要です。 .NET Framework 4 以降では、 System.Runtime.Versioning.ComponentGuaranteesAttribute 属性をそのコンポーネントに適用することで、コンポーネントが複数のバージョン間で互換性を維持することが期待される度合いを指定できます。 ツールでは、この属性を使用して、コンポーネントの将来のバージョンでの互換性保証の潜在的な違反を検出できます。
下位互換性
.NET Framework 4.5 以降のバージョンは、以前のバージョンの .NET Framework でビルドされたアプリと下位互換性があります。 つまり、以前のバージョンでビルドされたアプリとコンポーネントは、.NET Framework 4.5 以降のバージョンで変更なしで動作します。 ただし、既定では、アプリは開発された共通言語ランタイムのバージョンで実行されるため、.NET Framework 4.5 以降のバージョンでアプリを実行できるように構成ファイルを指定する必要がある場合があります。 詳細については、この記事の前の「 アプリのバージョン互換性 」セクションを参照してください。
実際には、.NET Framework の一見重要でない変更やプログラミング手法の変更によって、この互換性が損なわれる可能性があります。 たとえば、.NET Framework 4.5 のパフォーマンスが向上すると、以前のバージョンでは発生しなかった競合状態が発生する可能性があります。 同様に、.NET Framework アセンブリへのハードコーディングされたパスを使用し、特定のバージョンの .NET Framework との等価比較を実行し、リフレクションを使用してプライベート フィールドの値を取得することは、下位互換性のあるプラクティスではありません。 さらに、.NET Framework の各バージョンには、一部のアプリとコンポーネントの互換性に影響を与える可能性があるバグ修正とセキュリティ関連の変更が含まれています。
.NET Framework 4.5 以降のバージョンでアプリまたはコンポーネントが期待どおりに動作しない場合は、次のチェックリストを使用します。
.NET Framework 4.0 以降の任意のバージョンの .NET Framework で実行するようにアプリを開発した場合は、「 アプリケーションの互換性 」を参照して、対象の .NET Framework のバージョンとアプリが実行されているバージョンの間の変更の一覧を生成します。
.NET Framework 3.5 アプリがある場合は、「 .NET Framework 4 の移行に関する問題」も参照してください。
.NET Framework 2.0 アプリがある場合は、「 .NET Framework 3.5 SP1 の変更点」も参照してください。
.NET Framework 1.1 アプリがある場合は、「 .NET Framework 2.0 の変更点」も参照してください。
.NET Framework 4.5 またはそのポイント リリースで実行するように既存のソース コードを再コンパイルする場合、または .NET Framework 4.5 またはそのポイント リリースをターゲットとする新しいバージョンのアプリまたはコンポーネントを既存のソース コード ベースから開発する場合は、古い型とメンバーについて クラス ライブラリの古いもの を確認します。 を選択し、説明されている回避策を適用します。 (以前にコンパイルされたコードは、古いコードとしてマークされている型とメンバーに対して引き続き実行されます)。
.NET Framework 4.5 の変更によってアプリが破損したと判断した場合は、 ランタイム設定スキーマ、特に <AppContextSwitchOverrides> 要素を調べて、アプリの構成ファイルのランタイム設定を使用して以前の動作を復元できるかどうかを判断します。
ドキュメントに記載されていない問題が発生した場合は、 .NET 用 Developer Community サイト で問題を開くか、 Microsoft/dotnet GitHub リポジトリで問題を開いてください。
side-by-side 実行
問題に適した回避策が見つからない場合は、.NET Framework 4.5 (またはそのポイント リリースのいずれか) がバージョン 1.1、2.0、3.5 と並行して実行され、バージョン 4 を置き換えるインプレース更新です。 バージョン 1.1、2.0、および 3.5 を対象とするアプリの場合は、適切なバージョンの .NET Framework をターゲット コンピューターにインストールして、最適な環境でアプリを実行できます。 並列実行の詳細については、「並列実行」を参照してください。
こちらも参照ください
.NET