.NET Framework のバージョンの互換性Version compatibility in the .NET Framework

下位互換とは、プラットフォームの特定のバージョンで開発されたアプリが、そのプラットフォームの新しいバージョンでも実行できることを意味します。Backward compatibility means that an app that was developed for a particular version of a platform will run on later versions of that platform. .NET Framework では、下位互換性が最大限に高め67られています。 .NET Framework のあるバージョンで記述されたソース コードは、.NET Framework の新しいバージョンでコンパイルでき、.NET Framework のあるバージョンで実行されるバイナリは、新しいバージョンの .NET Framework でも同じように動作します。The .NET Framework tries to maximize backward compatibility: Source code written for one version of the .NET Framework should compile on later versions of the .NET Framework, and binaries that run on one version of the .NET Framework should behave identically on later versions of the .NET Framework.

アプリのバージョンの互換性Version compatibility for apps

既定では、アプリは、ビルド対象の .NET Framework のバージョンで実行されます。By default, an app runs on the version of the .NET Framework that it was built for. そのバージョンが存在せず、アプリの構成ファイルにサポートされるバージョンが定義されていない場合は、.NET Framework 初期化エラーが発生することがあります。If that version isn't present and the app configuration file doesn't define supported versions, a .NET Framework initialization error may occur. この場合、アプリは実行できません。In this case, the attempt to run the app will fail.

アプリを実行する特定のバージョンを定義するには、1 つ以上の <supportedRuntime> 要素をアプリの構成ファイルに追加します。To define the specific versions on which your app runs, add one or more <supportedRuntime> elements to your app's configuration file. <supportedRuntime> 要素は、サポートされるランタイムのバージョンを示します。最初の要素で最も優先度の高いバージョンを、最後の要素で最も優先度の低いバージョンを指定します。Each <supportedRuntime> element lists a supported version of the runtime, with the first specifying the most preferred version and the last specifying the least preferred version.

      <supportedRuntime version="v2.0.50727" />
      <supportedRuntime version="v4.0" />

詳細については、.NET Framework 4 以降のバージョンをサポートするアプリを構成する」を参照してください。For more information, see How to: Configure an App to Support .NET Framework 4 or 4.x.

コンポーネントのバージョンの互換性Version compatibility for components

アプリは、実行される .NET Framework のバージョンを制御できますが、コンポーネントは制御できません。An app can control the version of the .NET Framework on which it runs, but a component can't. コンポーネントとクラス ライブラリは特定のアプリのコンテキストで読み込まれるので、アプリが実行されるバージョンの .NET Framework 上で自動的に実行されます。Components and class libraries are loaded in the context of a particular app, and that's why they automatically run on the version of the .NET Framework that the app runs on.

この制限のため、互換性の保証は、コンポーネントにとって特に重要です。Because of this restriction, compatibility guarantees are especially important for components. .NET Framework 4 以降、コンポーネントに System.Runtime.Versioning.ComponentGuaranteesAttribute 属性を適用することにより、複数のバージョンで想定されるコンポーネントの互換性の程度を指定できるようになりました。Starting with the .NET Framework 4, you can specify the degree to which a component is expected to remain compatible across multiple versions by applying the System.Runtime.Versioning.ComponentGuaranteesAttribute attribute to that component. ツールは、この属性を使用して、コンポーネントの将来のバージョンでの互換性保証の潜在的な違反を検出できます。Tools can use this attribute to detect potential violations of the compatibility guarantee in future versions of a component.

下位互換性と .NET FrameworkBackward compatibility and the .NET Framework

.NET Framework 4.5 およびそれ以降のバージョンは、以前のバージョンの .NET Framework でビルドされたアプリと下位互換性があります。The .NET Framework 4.5 and later versions are backward-compatible with apps that were built with earlier versions of the .NET Framework. つまり、旧バージョンの .NET Framework でビルドしたアプリとコンポーネントは、.NET Framework 4.5 およびそれ以降のバージョンを変更せずに動作します。In other words, apps and components built with previous versions will work without modification on the .NET Framework 4.5 and later versions. ただし、既定では、アプリは、開発された共通言語ランタイムのバージョンで動作するため、アプリを .NET Framework 4.5 以降のバージョンで実行するには構成ファイルを提供する必要がある場合があります。However, by default, apps run on the version of the common language runtime for which they were developed, so you may have to provide a configuration file to enable your app to run on the .NET Framework 4.5 or later versions. 詳細については、この記事の前半に記載した「アプリのバージョンの互換性」を参照してください。For more information, see the Version compatibility for apps section earlier in this article.

現実的には、この互換性は、.NET Framework のわずかな変更やプログラミング技法の変化によって損なわれている可能性があります。In practice, this compatibility can be broken by seemingly inconsequential changes in the .NET Framework and changes in programming techniques. たとえば、.NET Framework 4.5 でのパフォーマンスの向上によって、旧バージョンでは発生しなかった競合状態が顕在化する可能性があります。For example, performance improvements in the .NET Framework 4.5 can expose a race condition that did not occur on earlier versions. 同様に、.NET Framework アセンブリへのハードコーディングされたパスの使用、.NET Framework の特定のバージョンでの等値比較の実行、およびリフレクションの使用によるプライベート フィールドの値の取得は、下位互換性のない動作です。Similarly, using a hard-coded path to .NET Framework assemblies, performing an equality comparison with a particular version of the .NET Framework, and getting the value of a private field by using reflection are not backward-compatible practices. さらに、各バージョンの .NET Framework には、バグの修正とセキュリティに関連する変更が含まれており、これらが一部のアプリとコンポーネントの互換性に影響する可能性があります。In addition, each version of the .NET Framework includes bug fixes and security-related changes that can affect the compatibility of some apps and components.

アプリまたはコンポーネントが .NET Framework 4.5 (ポイント リリースである .NET Framework 4.5.1、4.5.2、4.6、4.6.1、4.6.2、4.7、4.7.1、4.7.2、4.8 を含む) 上で期待どおりに動作しない場合は、次のチェックリストを利用してください。If your app or component doesn't work as expected on the .NET Framework 4.5 (including its point releases, the .NET Framework 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, or 4.8), use the following checklists:

  • アプリが .NET Framework 4.0 以降の任意バージョンの .NET Framework で実行できるように開発されている場合、アプリケーションの互換性に関する記事を参照して、ターゲットの .NET Framework バージョンとアプリを実行しているバージョン間の違いの一覧を作成します。If your app was developed to run on any version of the .NET Framework starting with the .NET Framework 4.0, see Application compatibility to generate lists of changes between your targeted .NET Framework version and the version on which your app is running.

  • .NET Framework 3.5 のアプリがある場合、「.NET Framework 4 の移行に関する問題」も参照してください。If you have a .NET Framework 3.5 app, also see .NET Framework 4 Migration Issues.

  • .NET Framework 2.0 のアプリがある場合、「.NET Framework 3.5 SP1 の変更点」も参照してください。If you have a .NET Framework 2.0 app, also see Changes in .NET Framework 3.5 SP1.

  • .NET Framework 1.1 アプリがある場合、「.NET Framework 2.0 の互換性に影響する変更点」も参照してください。If you have a .NET Framework 1.1 app, also see Changes in .NET Framework 2.0.

  • .NET Framework 4.5 またはそのポイント リリース上で実行するために既存のソース コードを再コンパイルする場合、あるいは、.NET Framework 4.5 またはそのポイント リリースをターゲットとするアプリまたはコンポーネントの新しいバージョンを既存のソース コード ベースから開発する場合は、「クラス ライブラリの互換性のために残されている機能」で、古い型とメンバーを確認し、説明されている回避策を適用してください。If you're recompiling existing source code to run on the .NET Framework 4.5 or its point releases, or if you're developing a new version of an app or component that targets the .NET Framework 4.5 or its point releases from an existing source code base, check What's Obsolete in the Class Library for obsolete types and members, and apply the workaround described. (コンパイル済みのコードは、互換性のために残されている旧式の型とメンバーに対して引き続き実行されます)。(Previously compiled code will continue to run against types and members that have been marked as obsolete.)

  • アプリが正常に動作しない原因が .NET Framework 4.5 での変更によるものとわかった場合は、「ランタイム設定スキーマ」の特に<AppContextSwitchOverrides> の要素を確認して、アプリの構成ファイル内のランタイム設定を使用して以前の動作を復元できるかどうかを見極めてください。If you determine that a change in the .NET Framework 4.5 has broken your app, check the Runtime Settings Schema, and particularly the <AppContextSwitchOverrides> Element, to determine whether you can use a runtime setting in your app's configuration file to restore the previous behavior.

  • 説明されていない問題が発生した場合は、.NET の開発者コミュニティ サイト上で問題を提起するか、Microsoft/dotnet GitHub リポジトリで問題を作成してください。If you come across an issue that isn't documented, open a problem on the Developer Community site for .NET or open an issue in the Microsoft/dotnet GitHub repo.

互換性と side-by-side 実行Compatibility and side-by-side execution

問題の適切な解決策が見つからない場合は、.NET Framework 4.5 (またはそのポイント リリースのいずれか) はバージョン 1.1、2.0、3.5 と side-by-side で実行でき、バージョン 4 に置き換わるインプレース更新であることを思い出してください。If you can't find a suitable workaround for your issue, remember that the .NET Framework 4.5 (or one of its point releases) runs side by side with versions 1.1, 2.0, and 3.5, and is an in-place update that replaces version 4. Version 1.1、2.0、3.5 を対象とするアプリでは、適切なバージョンの .NET Framework を対象コンピューターにインストールして、アプリを最良の環境で実行できます。For apps that target versions 1.1, 2.0, and 3.5, you can install the appropriate version of the .NET Framework on the target machine to run the app in its best environment. side-by-side 実行について詳しくは、side-by-side 実行に関するページを参照してください。For more information about side-by-side execution, see Side-by-Side Execution.

関連項目See also