Используя Visual Studio 2017, я только что создал простой проект API, как показано ниже. И в файле Startup.cs у меня есть этот код.
public void ConfigureServices(IServiceCollection services) {
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Может кто-нибудь пролить свет на то, что это значит? Нужно ли нам сохранить этот код?
Я думаю, MS следует добавить несколько комментариев, чтобы указать, что делает такой код.
.... поэтому приведенный выше код устанавливает режим совместимости ASP.NET Core 2.2.
Что вы, ребята, имеете в виду под режимом совместимости и отказом от подписки





Когда вы вызываете метод AddMvc, несколько компонентов регистрируются с определенными параметрами. Вы вызываете один метод, и вся структура mvc подключается.
Однако, если команда mvc в будущем решит изменить значение по умолчанию, или решит, что компонент больше не должен регистрироваться по умолчанию, или изменит ожидаемый побочный эффект этого метода, пользовательский код, полагающийся на это, сломается. Чтобы избежать такой поломки, вы можете вызвать метод совместимости set, который команда mvc будет использовать для сохранения предоставленного вам поведения.
Предположим, они вводят новую функцию, которая существует только тогда, когда вы ориентируетесь на платформу 2.3: если ваш код заявляет, что он нацелен на API 2.2, команда mvc будет знать, что вы не используете эту функцию, потому что она не существовала в то время. Таким образом, можно сделать безопасные предположения о том, что и как должно быть предоставлено.
Для получения дополнительных сведений см. MSDN.
Жалко нет четкого описания, что сломается (что самое главное для разработчиков) при смене Version_2_1 <-> Version_2_2
Йеннифер ответ замечательный, я просто добавлю кое-что.
Для ASP.NET Core 2.X вполне может потребоваться использование SetCompatibilityVersion по причинам, описанным Йеннифер.
Для ASP.NET Core 3.0 это не работает, то есть ничего не делает. Подробнее читайте здесь.
Для ASP.NET Core 3.X (но не 3.0) и более поздних версий он может иметь значение. Подробнее читайте здесь
так что для Core 5 и выше он вообще должен использоваться? Или мы можем это убрать?
Мне кажется, что Microsoft не обновляла их официальные документы @Eru, поэтому я не знаю. Но если вы что-то найдете, дайте ссылку здесь, и я могу обновить ответ
Конечно, но пока я только что удалил эту часть настройки, и все выглядит так, как будто работает без проблем. Но я предполагаю, что любой возможный сбой / ошибка может произойти во время определенных сценариев выполнения; использование старых nugets и т. д.
К вашему сведению, SetCompatibilityVersion не подходит для .Net Core 3 или новее и не рекомендуется в .Net 6.
https://docs.microsoft.com/en-us/aspnet/core/mvc/compatibility-version?view=aspnetcore-5.0
Я видел это сообщение docs.microsoft.com/en-us/aspnet/core/mvc/… «Выбирая, вы получаете последнее поведение и долгосрочное поведение ASP.NET Core», в противном случае метод SetCompatibilityVersion позволяет приложению отказаться от потенциально нарушающего поведения изменения, внесенные в ASP.NET Core MVC 2.1 или более поздней версии.