Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ab .NET 11 RC 1 erkennt der Optionsüberprüfungsquellengenerator eine explizite Implementierung von IValidateOptions<TOptions>.Validate als handschriftliche Implementierung. Sie meldet die Fehlerdiagnose SYSLIB1205 , anstatt eine separate öffentliche synchrone Validate Methode zu generieren.
Eingeführt in Version
.NET 11 RC 1
Bisheriges Verhalten
Zuvor hat der Quellgenerator keine explizite Implementierung von Validate(String, TOptions) als vorhandene Implementierung erkannt. Sie könnte eine zusätzliche öffentliche Validate Methode generieren, sodass Schnittstellenaufrufe die manuell geschriebene Implementierung verwendeten, während direkte Aufrufe des konkreten Validators die generierte Methode verwendeten. Die beiden Aufrufpfade könnten unterschiedliche Validierungsergebnisse erzeugen.
[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
ValidateOptionsResult IValidateOptions<MyOptions>.Validate(string? name, MyOptions options)
=> ValidateOptionsResult.Success;
}
Neues Verhalten
Ab .NET 11 erkennt der Quellgenerator die explizite Implementierung, meldet SYSLIB1205 und unterdrückt die synchrone Validate Generierung für dieses Optionsmodell.
Wenn der Validator auch IAsyncValidateOptions<TOptions> implementiert, bleiben synchrone und asynchrone Generierung unabhängig. Die handgeschriebene synchrone Implementierung erzeugt SYSLIB1205 und unterdrückt die Generierung von Validate, aber der Generator kann trotzdem ValidateAsync emittieren.
Art der einschneidenden Änderung
Diese Änderung kann sich auf die Quellkompatibilität auswirken.
Grund für die Änderung
Im vorherigen Verhalten konnten Schnittstellenaufrufe die manuell geschriebene Validierung verwenden, während direkte Aufrufe separat generierte Überprüfungen verwendet wurden. Das Erkennen expliziter Implementierungen verhindert, dass die generierte Überprüfung unbemerkt umgangen wird, und entfernt diese divergierenden Überprüfungspfade. Weitere Informationen finden Sie unter dotnet/runtime#130263.
Empfohlene Maßnahme
Wählen Sie einen Besitzer für die synchrone Validate Implementierung aus.
Um die quellgenerierte Überprüfung zu verwenden, behalten Sie [OptionsValidator] bei und entfernen die handschriftliche explizite Implementierung:
[OptionsValidator]
public partial class MyValidator : IValidateOptions<MyOptions>
{
}
Um die Validierung manuell selbst zu übernehmen, entfernen Sie [OptionsValidator] und implementieren Sie den vollständigen Validator selbst:
public sealed class MyValidator : IValidateOptions<MyOptions>
{
public ValidateOptionsResult Validate(string? name, MyOptions options)
=> ValidateOptionsResult.Success;
}
Es gibt keinen Kompatibilitätsschalter. Das Unterdrücken von SYSLIB1205 behebt die widersprüchliche Zuständigkeit der Methode nicht.