.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 では、下位互換性が最大限に高められています。 .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 is not present and the app configuration file does not 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.

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

詳しくは、.NET Framework 4 または 4.x をサポートするアプリの構成方法に関するページをご覧ください。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 cannot. コンポーネントとクラス ライブラリは特定のアプリのコンテキストで読み込まれるので、アプリが実行されるバージョンの .NET Framework で自動的に実行されます。Components and class libraries are loaded in the context of a particular app, and therefore 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 Framework 4.5Backward compatibility and the .NET Framework 4.5

.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.NET Framework 4.5.1、4.5.2、4.6、4.6.1、4.6.2、4.7、4.7.1、または 4.7.2 を含む) で期待どおりに動作しない場合は、次のチェックリストを参考にしてください。If your app or component does not work as expected on the .NET Framework 4.5 (including its point releases, the .NET Framework 4.5.1.NET Framework 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, or 4.7.2, use the following checklists:

  • アプリが .NET Framework 4.0 以降の任意の .NET Framework バージョンで実行できるように開発されている場合、「.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 in the .NET Framework 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.NET Framework 4.5 またはそのポイント リリースをターゲットとするアプリまたはコンポーネントの新しいバージョンを既存のソース コード ベースから開発する場合は、「クラス ライブラリの互換性のために残されている機能」で廃止された型とメンバーを確認し、説明されている回避策を適用してください。If you are recompiling existing source code to run on the .NET Framework 4.5 or its point releases, or if you are developing a new version of an app or component that targets the .NET Framework 4.5.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.NET Framework 4.5 での変更によるものとわかった場合は、「ランタイム設定スキーマ」を参照して、アプリの構成ファイルのランタイム設定を使用して以前の動作を復元できるかどうかを確認してください。If you determine that a change in the .NET Framework 4.5.NET Framework 4.5 has broken your app, check the Runtime Settings Schema to determine whether you can use a runtime setting in your app's configuration file to restore the previous behavior.

  • 説明されていない問題が発生した場合は、.NET の開発者コミュニティ サイトで問題を提起するか、Microsoft/dotnet GitHub リポジトリで issue を作成してください。If you encounter an issue that is not 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 (またはそのポイント リリース) は Version 1.1、2.0、3.5 と side-by-side で実行でき、Version 4 に置き換わるインプレース更新であることを思い出してください。If you cannot 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

新機能What's New
クラス ライブラリの互換性のために残されている機能What's Obsolete in the Class Library
アプリケーションの互換性Application Compatibility
Microsoft .NET Framework のサポート ライフサイクル ポリシーMicrosoft .NET Framework Support Lifecycle Policy
.NET framework 4 への移行に関する問題.NET Framework 4 Migration Issues