.NET Framework 类库中的过时项

.NET Framework 随时间而更改。 每个新版本都添加了提供新功能的新类型和类型成员。 现有类型及其成员也会随时间而更改。 例如,某些类型变得不那么重要,因为它们支持的技术被新技术所取代,某些方法被以某种方式优于的较新方法取代。

.NET Framework 和公共语言运行时努力支持向后兼容性(允许使用一个版本的 .NET Framework 开发的应用程序在下一版本的 .NET Framework 上运行)。 这样就很难直接删除类型或类型成员。 相反,.NET Framework 指示不应再使用类型或类型成员,方法是将其标记为 已过时已弃用。 通过将类型或成员标记为过时,开发人员意识到它将被移除,并有时间对此做出响应。 但是,使用类型或成员的现有代码继续在新版本的 .NET 中运行。

注释

在 .NET (Core)中,过时 API 不一定意味着将删除 API。 有关详细信息,请参阅 .NET 中的 API 删除

ObsoleteAttribute 特性

.NET Framework 通过用 ObsoleteAttribute 特性标记类型或类型成员来指示它们已过时。 将属性应用于类型或成员表示将在将来的某个版本中删除类型或成员,而无需中断使用该成员的已编译代码。

除了指示类型或类型成员已过时外, ObsoleteAttribute 还定义编译器如何处理包含该类型或成员的源代码。 编译器可以编译代码,但发出警告消息,也可以将类型或成员的使用视为错误。 在第一种情况下,代码可以成功编译,但警告消息指示类型或成员已过时。 第二种情况下,编译失败。

即使编译生成错误而不是警告消息, ObsoleteAttribute 也不会影响运行时行为。 也就是说,使用类型或成员且编译成功的应用程序将始终成功运行。 仅在尝试重新编译使用类型或成员的应用程序时会失败。

如何处理过时的类型和成员

当您升级并重新编译现有代码时,使用在应用程序中生成编译器警告的过时类型或成员是可以接受的。 但是,应查看编译器警告消息,以确定是否应更改应用程序代码。 如果消息未指向合适的替代方法,则应执行以下作之一:

  • 如果可能,请通过删除类型或成员的使用来更改代码。

    -或-

  • 查看有关此技术领域的文档,以确定如何响应弃用情况。

可以选择不针对更高版本的 .NET Framework 重新编译现有代码。 相反,可以指定运行现有已编译代码的 .NET Framework 版本。 例如,假设你有一个名为 app1.exe 的应用程序,该应用程序是针对 .NET Framework 3.5 编译的,但希望应用程序针对 .NET Framework 4.5 运行。 这需要以下步骤:

  1. 为主可执行文件创建配置文件并将其命名为 appName.exe.config,其中 appName 是应用程序可执行文件的名称。 对于示例中名为 app1.exe 的应用程序,将创建名为 app1.exe.config的 配置文件。

  2. 将以下内容添加到配置文件。

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

若要面向特定版本的 .NET Framework,请将以下字符串值之一分配给 version 该属性:

.NET Framework 版本 version 字符串
4.8(包括 4.8.1) v4.0
4.7(包括 4.7.1 和 4.7.2) v4.0
4.6(包括 4.6.1 和 4.6.2) v4.0
4.5(包括 4.5.1 和 4.5.2) v4.0
4 v4.0
3.5 v2.0.50727
2.0 v2.0.50727
1.1 v1.1.4322
1.0 v1.0.3705

.NET Framework 4.5 及更高版本的过时 API

以前版本的过时 API

另请参阅