.NET 9+ 中的实验功能

从 .NET 9 开始,某些功能会利用 ExperimentalAttribute 这些功能来指示 API 形状或功能包含在版本中,但尚未正式支持。 实验性功能使 .NET 团队能够收集有关 API 的形状和功能的反馈,目的是优化 API 并在下一个主要版本中删除 [Experimental] 该属性。

当代码引用实验性 API 时,编译器会生成 ID 类似于 SYSLIB5XXX的错误。 标记为实验的每个功能都具有唯一的诊断 ID。 若要表示同意使用实验性功能,请取消特定诊断。 可通过任何取消诊断的方式来做到这一点,但推荐的方法是将诊断添加到项目的 <NoWarn> 属性。 有关详细信息,请参阅取消警告

由于每个试验性功能都有单独的 ID,因此同意使用一个试验性功能并不同意使用另一个功能。

参考

下表为 .NET 9+ 中的实验 API 提供了索引 SYSLIB5XXX

诊断 ID 试验版 说明
SYSLIB5001 .NET 9 Tensor<T>与相关 API 是实验性的System.Numerics.Tensors
SYSLIB5002 .NET 9 SystemColors 备用颜色是实验性的
SYSLIB5003 .NET 9 Sve 是实验性的
SYSLIB5004 .NET 9 DivRem(UInt32, Int32, Int32) 是实验性的,因为性能不如 T.DivRem
SYSLIB5005 .NET 9 System.Formats.Nrbf 是实验性的

禁止显示警告

使用实验性功能,你可以在将该功能标记为稳定且完全受支持的之前提交有关 API 形状和功能的反馈。 但使用该功能会从编译器生成警告。 取消显示警告时,你确认 API 形状或功能可能会在下一个主要版本中更改。 甚至可以删除 API。 可以通过项目设置(建议)或#pragma代码中的指令来禁止显示警告<NoWarn>

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

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

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

// Disable the warning.
#pragma warning disable SYSLIB5001

// Code that uses an experimental API that produces the diagnostic SYSLIB5001
//...

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

另请参阅