.NET Framework のアプリケーションの互換性Application Compatibility in the .NET Framework

はじめにIntroduction

.NET の各リリースにおいて互換性は非常に重要な目標です。Compatibility is a very important goal of each .NET release. 各バージョンが付加的な場合は互換性が確保され、以前のバージョンも引き続き動作します。Compatibility ensures that each version is additive, so previous versions will still work. 一方、以前の機能に変更が生じた場合 (パフォーマンスの向上、セキュリティに関する問題への対処、またはバグの修正を目的として)、既存のコードまたは既存のアプリケーションを以降のバージョンで実行すると互換性に問題が発生する可能性があります。On the other hand, changes to previous functionality (to improve performance, address security issues, or fix bugs) can cause compatibility problems in existing code or existing applications that run under a later version. .NET Framework では、変更の再ターゲットとランタイムの変更点を認識します。The .NET Framework recognizes retargeting changes and runtime changes. 変更の再ターゲットは、.NET Framework の特定のバージョンをターゲットとしているもののそれ以降のバージョンで実行されるアプリケーションに影響します。Retargeting changes affect applications that target a specific version of the .NET Framework but are running on a later version. ランタイムの変更点は、特定のバージョンで実行されるすべてのアプリケーションに影響します。Runtime changes affect all applications running on a particular version.

各アプリは .NET Framework の特定のバージョンをターゲットとします。バージョンは次の方法で指定することができます。Each app targets a specific version of the .NET Framework, which can be specified by:

  • Visual Studio でターゲット フレームワークを定義する。Defining a target framework in Visual Studio.
  • プロジェクト ファイルでターゲット フレームワークを指定する。Specifying the target framework in a project file.
  • TargetFrameworkAttribute をソース コードに適用する。Applying a TargetFrameworkAttribute to the source code.

ターゲットに指定されたバージョンより新しいバージョンでアプリが実行されると、.NET Framework は後方互換動作によって、ターゲットに指定されている古いバージョンを模倣します。When running on a newer version than what was targeted, the .NET Framework will use quirked behavior to mimic the older targeted version. つまり、アプリは、Framework の新しいバージョンで実行されていても、古いバージョンで実行されているように機能します。In other words, the app will run on the newer version of the Framework, but act as if it's running on the older version. .NET Framework のバージョン間の互換性の問題の多くは、この後方互換モデルを通して対応されます。Many of the compatibility issues between versions of the .NET Framework are mitigated through this quirking model. アプリケーションがターゲットとする .NET Framework のバージョンは、コードが実行されているアプリケーション ドメインのエントリ アセンブリのターゲット バージョンによって決まります。The version of the .NET Framework that an application targets is determined by the target version of the entry assembly for the application domain that the code is running in. そのアプリケーション ドメインに読み込まれたすべての追加アセンブリは、その .NET Framework バージョンをターゲットとします。All additional assemblies loaded in that application domain target that .NET Framework version. たとえば、実行可能ファイルの場合、実行可能ファイルのターゲットとなるフレームワークは、その AppDomain 内のすべてのアセンブリが実行される互換モードになります。For example, in the case of an executable, the framework the executable targets is the compatibility mode all assemblies in that AppDomain will run under.

ランタイムの変更Runtime changes

ランタイムの問題とは、コンピューターに新しいランタイムを配置し前と同じバイナリを実行したが動作が異なっている場合に発生する問題です。Runtime issues are those that arise when a new runtime is placed on a machine and the same binaries are run, but different behavior is seen. バイナリが .NET Framework 4.0 向けにコンパイルされている場合、そのバイナリは .NET Framework 4.5 以降のバージョンでは .NET Framework 4.0 互換モードで実行されます。If a binary was compiled for .NET Framework 4.0 it will run in .NET Framework 4.0 compatibility mode on 4.5 or later versions. 4.5 に影響する変更の多くは、4.0 向けにコンパイルされたバイナリには影響しません。Many of the changes that affect 4.5 will not affect a binary compiled for 4.0. これは、AppDomain に固有のものであり、入力アセンブリの設定内容によって異なります。This is specific to the AppDomain and depends on the settings of the entry assembly.

変更の再ターゲットRetargeting changes

再ターゲットの問題とは、4.0 をターゲットにしていたアセンブリが今度は 4.5 をターゲットにするように設定されたときに発生するものです。Retargeting issues are those that arise when an assembly that was targeting 4.0 is now set to target 4.5. この場合、アセンブリは新しい機能を選択するようになるので、古い機能との互換性の問題が発生する可能性があります。Now the assembly opts into the new features as well as potential compatibility issues to old features. 繰り返しますが、これは入力アセンブリによって異なります。したがって、アセンブリを使用するコンソール アプリ、またはアセンブリを参照する Web サイトが該当します。Again, this is dictated by the entry assembly, so the console app that uses the assembly, or the website that references the assembly.

.NET 互換性診断.NET Compatibility Diagnostics

.NET 互換性診断は、.NET Framework のバージョン間のアプリケーション互換性問題の識別に役立つ Roslyn を使用したアナライザーです。The .NET Compatibility Diagnostics are Roslyn-powered analyzers that help identify application compatibility issues between versions of the .NET Framework. この一覧には、使用可能なすべてのアナライザーが含まれますが、特定の移行に適用されるのは、その一部分のみです。This list contains all of the analyzers available, although only a subset will apply to any specific migration. アナライザーは、計画的な移行に該当する問題と表面上の問題にすぎないものを判断します。The analyzers will determine which issues are applicable for the planned migration and will only surface those.

各問題には、次の情報が含まれます。Each issue includes the following information:

  • 以前のバージョンからの変更点の説明。The description of what has changed from a previous version.

  • 変更が顧客に与える影響と、バージョン間で互換性を保つための回避策があるかどうかの説明。How the change affects customers and whether any workarounds are available to preserve compatibility across versions.

  • 変更の重要性の評価。An assessment of how important the change is. アプリケーション互換性問題は、次のように分類されます。Application compatibility issue are categorized as follows:

    MajorMajor 多数のアプリに影響するか、コードの大幅な変更を必要とする重大な変更。A significant change that affects a large number of apps or requires substantial modification of code.
    マイナーMinor 少数のアプリに影響するか、コードにわずかな変更を加える必要がある変更。A change that affects a small number of apps or that requires minor modification of code.
    エッジ ケースEdge case 非常に限られた一般的でないシナリオでアプリに影響を与える変更。A change that affects apps under very specific, uncommon scenarios.
    透明Transparent アプリケーションの開発者やユーザーには大きな影響を及ぼさない変更。A change with no noticeable effect on the application's developer or user.
  • バージョンは、フレームワークで変更が最初に適用されたバージョンを示します。Version indicates when the change first appears in the framework. 変更によっては、特定のバージョンで導入され、それ以降のバージョンで元に戻されるものがあります。そのバージョンも同様に示されます。Some of the changes are introduced in a particular version and reverted in a later version; that is indicated as well.

  • 変更の種類:The type of change:

    再ターゲット中Retargeting 変更は、新しいバージョンの .NET Framework 向けに再コンパイルされるアプリに影響します。The change affects apps that are recompiled to target a new version of the .NET Framework.
    ランタイムRuntime 変更は、以前のバージョンの .NET Framework 向けだが、その後のバージョンでも実行する既存のアプリに影響します。The change affects an existing app that targets a previous version of the .NET Framework but runs on a later version.
  • 影響を受ける API (ある場合)。The affected APIS, if any.

  • 使用可能な診断の IDThe IDs of the available diagnostics

使用法Usage

開始するには、以下の中から互換性の変更の種類を選択します。To begin, select the type of compatibility change below:

参照See Also