다음을 통해 공유


ASP.NET Core MVC에 대한 호환성 버전

작성자: Rick Anderson

SetCompatibilityVersion 메서드는 ASP.NET Core 3.0 앱용 no-op입니다. 즉, SetCompatibilityVersion의 어떤 값으로 CompatibilityVersion를 호출해도 애플리케이션에 영향을 주지 않습니다.

ASP.NET Core 2.x 앱의 작동 방식을 SetCompatibilityVersion 확인하려면 이 문서의 ASP.NET Core 2.2 버전을 선택합니다.

SetCompatibilityVersion 메서드를 사용하면 ASP.NET Core 2.x 앱이 ASP.NET Core MVC 2.1 또는 2.2에 도입된 잠재적으로 호환성이 손상되는 동작 변경을 옵트인하거나 옵트아웃할 수 있습니다. 이러한 잠재적 호환성이 손상되는 동작 변경은 일반적으로 MVC 하위 시스템이 동작하는 방식과 런타임에서 코드를 호출하는 방법에 있습니다. 옵트인하면 최신 동작과 ASP.NET Core의 장기 동작을 얻을 수 있습니다.

다음 코드는 호환성 모드를 ASP.NET Core 2.2로 설정합니다.

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

최신 버전(CompatibilityVersion.Latest)을 사용하여 앱을 테스트하는 것이 좋습니다. 대부분의 앱은 최신 버전을 사용해도 중대한 동작 변경 없이 작동할 것으로 예상합니다.

호출 SetCompatibilityVersion(CompatibilityVersion.Version_2_0) 하는 앱은 ASP.NET Core 2.1/2.2 MVC 버전에 도입된 잠재적으로 호환성이 손상되는 동작 변경으로부터 보호됩니다. 이 보호 기능:

  • 모든 2.1 이상 변경 내용에는 적용되지 않으며 MVC 하위 시스템의 ASP.NET Core 런타임 동작 변경 내용이 손상될 수 있습니다.
  • ASP.NET Core 3.0으로 확장되지 않습니다.

ASP.NET Core 2.1 및 2.2 앱이 호출하지 않는 경우, 기본 호환성은 2.0 호환성입니다. 즉, 호출하지 않는 것은 호출 SetCompatibilityVersionSetCompatibilityVersion(CompatibilityVersion.Version_2_0)과 동일합니다.

다음 코드는 다음 동작을 제외하고 호환성 모드를 ASP.NET Core 2.2로 설정합니다.

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

호환성이 손상되는 동작 변경이 발생하는 앱의 경우 적절한 호환성 스위치를 사용합니다.

  • 최신 릴리스를 사용하고 특정 호환성이 손상되는 동작 변경을 옵트아웃할 수 있습니다.
  • 최신 변경 내용으로 작동하도록 앱을 업데이트할 시간을 제공합니다.

설명 MvcOptions 서에는 변경된 내용과 변경 내용이 대부분의 사용자에게 개선된 이유에 대해 잘 설명되어 있습니다.

ASP.NET Core 3.0에서는 호환성 스위치에서 지원하는 이전 동작이 제거되었습니다. 이는 거의 모든 사용자에게 혜택을 주는 긍정적인 변화입니다. 2.1 및 2.2에서 이러한 변경 내용을 도입하면 대부분의 앱이 이점을 얻을 수 있지만 다른 앱은 업데이트할 시간이 있습니다.