.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