Freigeben über


Kompatibilitätsversion für ASP.NET Core MVC

Von Rick Anderson

Die SetCompatibilityVersion Methode ist eine no-op für ASP.NET Core 3.0-Apps. Das heißt, das Aufrufen SetCompatibilityVersion mit einem beliebigen Wert CompatibilityVersion hat keine Auswirkungen auf die Anwendung.

Um zu sehen, wie SetCompatibilityVersion mit ASP.NET Core 2.x-Apps funktioniert, wählen Sie die ASP.NET Core 2.2-Version dieses Artikels aus.

Die SetCompatibilityVersion Methode ermöglicht es einer ASP.NET Core 2.x-App, potenziell inkompatible Verhaltensänderungen, die in ASP.NET Core MVC 2.1 oder 2.2 eingeführt wurden, zu aktivieren oder zu deaktivieren. Diese potenziell störenden Verhaltensänderungen zeigen sich im Allgemeinen darin, wie sich das MVC-Subsystem verhält und wie Ihr Code zur Laufzeit aufgerufen wird. Wenn Sie sich anmelden, erhalten Sie das neueste Verhalten und das langfristige Verhalten von ASP.NET Core.

Der folgende Code legt den Kompatibilitätsmodus auf ASP.NET Core 2.2 fest:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

Es wird empfohlen, Ihre App mit der neuesten Version (CompatibilityVersion.Latest) zu testen. Wir gehen davon aus, dass die meisten Apps bei Verwendung der neuesten Version keine schwerwiegenden Verhaltensänderungen aufweisen.

Apps, die SetCompatibilityVersion(CompatibilityVersion.Version_2_0) aufrufen, sind vor potenziell funktionsstörenden Verhaltensänderungen geschützt, die in den ASP.NET Core 2.1/2.2 MVC-Versionen eingeführt wurden. Dieser Schutz:

  • Gilt nicht für alle Änderungen von 2.1 oder höher, es ist darauf ausgerichtet, potenziell ASP.NET Core-Laufzeitverhaltensänderungen im MVC-Subsystem zu unterbrechen.
  • Erstreckt sich nicht auf ASP.NET Core 3.0.

Die Standardkompatibilität für ASP.NET Core 2.1- und 2.2-Apps, die nichtSetCompatibilityVersion aufrufen, ist die Kompatibilität zu 2.0. Das heißt, SetCompatibilityVersion nicht aufzurufen, ist gleichbedeutend mit dem Aufrufen von SetCompatibilityVersion(CompatibilityVersion.Version_2_0).

Der folgende Code legt den Kompatibilitätsmodus auf ASP.NET Core 2.2 fest, mit Ausnahme der folgenden Verhaltensweisen:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        // Include the 2.2 behaviors
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
        // Except for the following.
        .AddMvcOptions(options =>
        {
            // Don't combine authorize filters (keep 2.0 behavior).
            options.AllowCombiningAuthorizeFilters = false;
            // All exceptions thrown by an IInputFormatter are treated
            // as model state errors (keep 2.0 behavior).
            options.InputFormatterExceptionPolicy =
                InputFormatterExceptionPolicy.AllExceptions;
        });
}

Für Apps, die auf gravierende Verhaltensänderungen stoßen, verwenden Sie die entsprechenden Kompatibilitätsschalter.

  • Ermöglicht es Ihnen, die neueste Version zu verwenden und spezifische Änderungen am Verhalten bei Unterbrechungen zu deaktivieren.
  • Gibt Ihnen Zeit, Ihre App so zu aktualisieren, dass sie mit den neuesten Änderungen funktioniert.

Die MvcOptions Dokumentation enthält eine gute Erklärung darüber, was sich geändert hat und warum die Änderungen für die meisten Benutzer eine Verbesserung sind.

Mit ASP.NET Core 3.0 wurden alte Verhaltensweisen, die von Kompatibilitätsschaltern unterstützt werden, entfernt. Wir sind der Meinung, dass dies positive Veränderungen sind, die fast allen Benutzern zugute kommen. Durch die Einführung dieser Änderungen in 2.1 und 2.2 können die meisten Apps profitieren, während andere Zeit haben, zu aktualisieren.