.NET 7+ 中的过时 Windows 窗体功能

从 .NET 7 开始,某些 Windows 窗体 API 标记为已过时(否则生成警告),并使用格式为 WFDEVXXX 的自定义诊断 ID。

如果由于使用过时的 API 而遇到生成警告或错误,请遵循参考部分中列出的诊断 ID 所提供的特定指导。 不能使用过时类型或成员的标准诊断 ID (CS0618) 取消有关这些过时类型或成员的警告或错误;请改用自定义 WFDEVXXX 诊断 ID 值。 有关详细信息,请参阅取消警告

参考

下表提供了 .NET 7+ 中 WFDEVXXX 过时和警告的索引。

诊断 ID 警告或错误 说明
WFDEV001 警告 强制转换到 IntPtr 或从中强制转换不安全。 请改用 WParamInternalLParamInternalResultInternal
WFDEV002 警告/错误 System.Windows.Forms.DomainUpDown.DomainUpDownAccessibleObject 不再用于为 DomainUpDown 控件提供可访问支持。 请改用 AccessibleObject
WFDEV003 警告 System.Windows.Forms.DomainUpDown.DomainItemAccessibleObject 不再用于为 DomainUpDown 项提供可访问支持。 请改用 AccessibleObject

禁止显示警告

建议尽可能使用可用的解决方法。 但是,如果无法更改代码,可以通过 #pragma 指令或 <NoWarn> 项目设置来禁止显示警告。 如果必须使用过时 API,并且 WFDEVXXX 诊断没有显示为错误,则可以在代码或项目文件中取消该警告。

若要禁止显示代码中的警告,请执行以下操作:

// Disable the warning.
#pragma warning disable WFDEV001

// Code that uses obsolete API.
//...

// Re-enable the warning.
#pragma warning restore WFDEV001

若要禁止显示项目文件中的警告,请执行以下操作:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   <TargetFramework>net7.0</TargetFramework>
   <!-- NoWarn below suppresses WFDEV001 project-wide -->
   <NoWarn>$(NoWarn);WFDEV001</NoWarn>
   <!-- To suppress multiple warnings, you can use multiple NoWarn elements -->
   <NoWarn>$(NoWarn);WFDEV001</NoWarn>
   <NoWarn>$(NoWarn);WFDEV003</NoWarn>
   <!-- Alternatively, you can suppress multiple warnings by using a semicolon-delimited list -->
   <NoWarn>$(NoWarn);WFDEV001;WFDEV003</NoWarn>
  </PropertyGroup>
</Project>

注意

以这种方式取消警告只会禁用指定的过时警告。 它不会禁用任何其他警告,包括具有不同诊断 ID 的其他过时警告。

另请参阅