Что такое SetCompatibilityVersion внутри класса запуска основного проекта веб-API asp.net

Используя Visual Studio 2017, я только что создал простой проект API, как показано ниже. И в файле Startup.cs у меня есть этот код.

public void ConfigureServices(IServiceCollection services) {

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

}

Может кто-нибудь пролить свет на то, что это значит? Нужно ли нам сохранить этот код?

Я думаю, MS следует добавить несколько комментариев, чтобы указать, что делает такой код.

Что такое SetCompatibilityVersion внутри класса запуска основного проекта веб-API asp.net

Я видел это сообщение docs.microsoft.com/en-us/aspnet/core/mvc/… «Выбирая, вы получаете последнее поведение и долгосрочное поведение ASP.NET Core», в противном случае метод SetCompatibilityVersion позволяет приложению отказаться от потенциально нарушающего поведения изменения, внесенные в ASP.NET Core MVC 2.1 или более поздней версии.

Francois Borgies 15.01.2019 07:46

.... поэтому приведенный выше код устанавливает режим совместимости ASP.NET Core 2.2.

bolkay 15.01.2019 07:50

Что вы, ребята, имеете в виду под режимом совместимости и отказом от подписки

VivekDev 15.01.2019 08:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
28
3
8 827
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Когда вы вызываете метод AddMvc, несколько компонентов регистрируются с определенными параметрами. Вы вызываете один метод, и вся структура mvc подключается.

Однако, если команда mvc в будущем решит изменить значение по умолчанию, или решит, что компонент больше не должен регистрироваться по умолчанию, или изменит ожидаемый побочный эффект этого метода, пользовательский код, полагающийся на это, сломается. Чтобы избежать такой поломки, вы можете вызвать метод совместимости set, который команда mvc будет использовать для сохранения предоставленного вам поведения.

Предположим, они вводят новую функцию, которая существует только тогда, когда вы ориентируетесь на платформу 2.3: если ваш код заявляет, что он нацелен на API 2.2, команда mvc будет знать, что вы не используете эту функцию, потому что она не существовала в то время. Таким образом, можно сделать безопасные предположения о том, что и как должно быть предоставлено.

Для получения дополнительных сведений см. MSDN.

Жалко нет четкого описания, что сломается (что самое главное для разработчиков) при смене Version_2_1 <-> Version_2_2

Pavel Biryukov 12.04.2021 13:00

Йеннифер ответ замечательный, я просто добавлю кое-что.

  • Для ASP.NET Core 2.X вполне может потребоваться использование SetCompatibilityVersion по причинам, описанным Йеннифер.

  • Для ASP.NET Core 3.0 это не работает, то есть ничего не делает. Подробнее читайте здесь.

  • Для ASP.NET Core 3.X (но не 3.0) и более поздних версий он может иметь значение. Подробнее читайте здесь

так что для Core 5 и выше он вообще должен использоваться? Или мы можем это убрать?

Eru 08.09.2021 22:41

Мне кажется, что Microsoft не обновляла их официальные документы @Eru, поэтому я не знаю. Но если вы что-то найдете, дайте ссылку здесь, и я могу обновить ответ

Jim Aho 13.09.2021 11:55

Конечно, но пока я только что удалил эту часть настройки, и все выглядит так, как будто работает без проблем. Но я предполагаю, что любой возможный сбой / ошибка может произойти во время определенных сценариев выполнения; использование старых nugets и т. д.

Eru 14.09.2021 14:13

К вашему сведению, SetCompatibilityVersion не подходит для .Net Core 3 или новее и не рекомендуется в .Net 6.

https://docs.microsoft.com/en-us/aspnet/core/mvc/compatibility-version?view=aspnetcore-5.0

Другие вопросы по теме