Поделиться через


Экспериментальные функции в .NET 9+

Начиная с .NET 9, некоторые функции используются ExperimentalAttribute для указания того, что форма или функциональность API включены в выпуск, но еще не поддерживаются официально. Экспериментальные функции позволяют команде .NET собирать отзывы о форме и функциональности API с целью уточнения API и удаления атрибута [Experimental] в следующем крупном выпуске.

Когда код ссылается на экспериментальный API, компилятор создает ошибку с идентификатором, например SYSLIB5XXX. Каждая функция, помеченная как экспериментальная, имеет уникальный идентификатор диагностики. Чтобы выразить согласие на использование экспериментальной функции, вы подавляете определенную диагностику. Это можно сделать с помощью любого из средств подавления диагностика, но рекомендуется добавить диагностику в свойство проекта<NoWarn>. Дополнительные сведения см. в разделе Отключение предупреждений.

Так как каждая экспериментальная функция имеет отдельный идентификатор, согласие на использование одной экспериментальной функции не дает согласия на использование другого.

Справочные материалы

В следующей таблице представлен индекс SYSLIB5XXX экспериментальных API в .NET 9+.

ИД диагностики Экспериментальная версия Description
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 может быть удален даже. Предупреждение можно отключить с помощью <NoWarn> параметра проекта (рекомендуется) или директивы в коде #pragma .

Чтобы отключить предупреждения в файле проекта:

<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

См. также