Versão de compatibilidade do ASP.NET Core MVCCompatibility version for ASP.NET Core MVC

De Rick AndersonBy Rick Anderson

O SetCompatibilityVersion método é não operacional para aplicativos ASP.NET Core 3,0.The SetCompatibilityVersion method is a no-op for ASP.NET Core 3.0 apps. Ou seja, chamar SetCompatibilityVersion com qualquer valor de CompatibilityVersion não afeta o aplicativo.That is, calling SetCompatibilityVersion with any value of CompatibilityVersion has no impact on the application.

Para ver como SetCompatibilityVersion o funciona com os aplicativos ASP.NET Core 2. x, selecione a versão ASP.NET Core 2,2 deste artigo.To see how SetCompatibilityVersion works with ASP.NET Core 2.x apps, select the ASP.NET Core 2.2 version of this article.

O SetCompatibilityVersion método permite que um aplicativo ASP.NET Core 2. x aceite ou recuse alterações de comportamento potencialmente quebradas introduzidas no ASP.NET Core MVC 2,1 ou 2,2.The SetCompatibilityVersion method allows an ASP.NET Core 2.x app to opt-in or opt-out of potentially breaking behavior changes introduced in ASP.NET Core MVC 2.1 or 2.2. Essas possíveis alterações da falha de comportamento geralmente afetam como o subsistema MVC se comporta e como o código do usuário é chamado pelo runtime.These potentially breaking behavior changes are generally in how the MVC subsystem behaves and how your code is called by the runtime. Ao aceitar, você obtém o comportamento mais recente e o comportamento de longo prazo do ASP.NET Core.By opting in, you get the latest behavior, and the long-term behavior of ASP.NET Core.

O código a seguir define o modo de compatibilidade para o ASP.NET Core 2.2:The following code sets the compatibility mode to ASP.NET Core 2.2:

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

É recomendável que você teste seu aplicativo usando a versão mais recente (CompatibilityVersion.Latest).We recommend you test your app using the latest version (CompatibilityVersion.Latest). Estimamos que a maioria dos aplicativos não terão alterações da falha de comportamento usando a versão mais recente.We anticipate that most apps won't have breaking behavior changes using the latest version.

Os aplicativos que chamam SetCompatibilityVersion(CompatibilityVersion.Version_2_0) são protegidos contra alterações de comportamento potencialmente quebras introduzidas nas versões MVC do ASP.NET Core 2.1/2.2.Apps that call SetCompatibilityVersion(CompatibilityVersion.Version_2_0) are protected from potentially breaking behavior changes introduced in the ASP.NET Core 2.1/2.2 MVC versions. Essa proteção:This protection:

  • Não se aplica a todas as alterações da 2.1 e posteriores, ela é direcionada às possíveis alterações da falha de comportamento do runtime do ASP.NET Core no subsistema de MVC.Does not apply to all 2.1 and later changes, it's targeted to potentially breaking ASP.NET Core runtime behavior changes in the MVC subsystem.
  • Não estende para o ASP.NET Core 3,0.Does not extend to ASP.NET Core 3.0.

A compatibilidade padrão para os aplicativos ASP.NET Core 2,1 e 2,2 que não chamam SetCompatibilityVersion é a compatibilidade 2,0.The default compatibility for ASP.NET Core 2.1 and 2.2 apps that do not call SetCompatibilityVersion is 2.0 compatibility. Ou seja, não chamar SetCompatibilityVersion é o mesmo que chamar SetCompatibilityVersion(CompatibilityVersion.Version_2_0).That is, not calling SetCompatibilityVersion is the same as calling SetCompatibilityVersion(CompatibilityVersion.Version_2_0).

O código a seguir define o modo de compatibilidade para o ASP.NET Core 2.2, exceto para os seguintes comportamentos:The following code sets the compatibility mode to ASP.NET Core 2.2, except for the following behaviors:

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;
        });
}

Para aplicativos que encontram alterações da falha de comportamento, o uso das opções de compatibilidade apropriadas:For apps that encounter breaking behavior changes, using the appropriate compatibility switches:

  • Permite que você use a versão mais recente e recuse alterações da falha de comportamento específicas.Allows you to use the latest release and opt out of specific breaking behavior changes.
  • Tenha tempo para atualizar seu aplicativo para que ele funcione com as alterações mais recentes.Gives you time to update your app so it works with the latest changes.

A documentação MvcOptions tem uma boa explicação sobre o que mudou e por que as alterações são uma melhoria para a maioria dos usuários.The MvcOptions documentation has a good explanation of what changed and why the changes are an improvement for most users.

Com o ASP.NET Core 3,0, os comportamentos antigos com suporte das opções de compatibilidade foram removidos.With ASP.NET Core 3.0, old behaviors supported by compatibility switches have been removed. Consideramos que essas são alterações positivas que beneficiam quase todos os usuários.We feel these are positive changes benefitting nearly all users. Ao introduzir essas alterações em 2,1 e 2,2, a maioria dos aplicativos pode se beneficiar, enquanto outras têm tempo para atualizar.By introducing these changes in 2.1 and 2.2, most apps can benefit, while others have time to update.