Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с .NET 11 RC 1, генератор источников проверки параметров распознает явную реализацию IValidateOptions<TOptions>.Validate как рукописную реализацию. Он сообщает диагностическое сообщение об ошибке SYSLIB1205 вместо создания отдельного общедоступного синхронного метода Validate.
Представленная версия
.NET 11 RC 1
Предыдущее поведение
Ранее генератор источника не распознал явную реализацию Validate(String, TOptions) как существующую реализацию. Он может создать дополнительный открытый Validate метод, поэтому вызовы интерфейса использовали рукописную реализацию, а прямые вызовы конкретного валидатора — созданный метод. Два пути вызова могут создавать различные результаты проверки.
[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
ValidateOptionsResult IValidateOptions<MyOptions>.Validate(string? name, MyOptions options)
=> ValidateOptionsResult.Success;
}
Новое поведение
Начиная с .NET 11, генератор источника распознает явную реализацию, сообщает о SYSLIB1205 и подавляет синхронное Validate поколение для этой модели параметров.
Если валидатор также реализует IAsyncValidateOptions<TOptions>, синхронная и асинхронная генерация остаются независимыми. Рукописная синхронная реализация создает SYSLIB1205 и подавляет созданные Validate, но генератор по-прежнему может выдавать ValidateAsync.
Тип разрушающего изменения
Это изменение может повлиять на совместимость исходного кода .
Причина изменения
Предыдущее поведение позволяло вызовам интерфейса использовать написанную вручную проверку, тогда как прямые вызовы использовали отдельно сгенерированную проверку. Распознавание явных реализаций препятствует незаметному обходу созданной проверки и устраняет эти расходящиеся пути проверки. Дополнительные сведения см. в статье dotnet/runtime#130263.
Рекомендуемое действие
Выберите одного владельца для синхронной Validate реализации.
Чтобы использовать проверку, созданную источником, сохраните [OptionsValidator] и удалите явную реализацию, написанную вручную:
[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
}
Чтобы самостоятельно управлять проверкой, удалите [OptionsValidator] и реализуйте полный валидатор самостоятельно:
public sealed class MyValidator : IValidateOptions<MyOptions>
{
public ValidateOptionsResult Validate(string? name, MyOptions options)
=> ValidateOptionsResult.Success;
}
Нет переключателя совместимости. Подавление SYSLIB1205 не устраняет конфликт прав владения методом.