.NET Framework 中的应用程序兼容性

兼容性是每个 .NET Framework 版本的重要目标。 兼容性可确保每个版本都是累加的,因此以前的版本将继续工作。 另一方面,更改以前的功能(例如,为了提高性能、解决安全问题或修复 bug),可能会导致现有代码或更高版本下运行的现有应用程序出现兼容性问题。

每个应用都以特定版本的 .NET Framework 为目标::

  • 在 Visual Studio 中定义目标框架。
  • 在项目文件中指定目标框架。
  • TargetFrameworkAttribute应用到源代码。

从一个版本的 .NET Framework 迁移到另一个版本时,需要考虑两种类型的更改:

运行时更改

运行时问题是在将新运行时放置在计算机和应用的行为发生更改时出现的问题。 如果应用在比目标 .NET 版本更高的版本上运行,.NET Framework 会通过怪异的行为来模拟旧版目标版本。 应用在较新版本上运行,但就像它在较旧版本上运行一样。 .NET Framework 版本之间的许多兼容性问题通过这种古怪的模型得到缓解。 例如,如果为 .NET Framework 4.0 编译了二进制文件,但在具有 .NET Framework 4.5 或更高版本的计算机上运行,则它在 .NET Framework 4.0 兼容模式下运行。 这意味着更高版本中的许多更改不会影响二进制文件。

应用程序所面向的 .NET Framework 版本由代码运行的应用程序域的入口程序集的目标版本确定。 在该应用程序域中加载的所有附加程序集都以该版本为目标。 例如,对于可执行文件,可执行文件所面向的版本是该应用程序域中运行的所有程序集的兼容性模式。

重定目标更改

重定目标更改是在重新编译程序集以面向较新版本时出现的更改。 面向较高版本意味着程序集会选择加入新功能,同时可能存在与旧功能的兼容性问题。

影响分类

在描述运行时和重定向更改的文章中,例如, 针对迁移到 .NET Framework 4.8.x 的重定向更改,各个项按预期影响进行分类,如下所示:

主要
影响大量应用或需要大量修改代码的重大更改。

次要
影响少量应用或需要对代码进行轻微修改的更改。

边缘案例
仅在少数非常特定的情况下影响应用的更改。

透明
对应用的开发人员或用户没有明显影响的变化。 由于此更改,应用不应需要修改。

另请参阅