ASP.NET Web API核心项目的启动类内部的SetCompatibilityVersion是什么

Viv*_*Dev 9 c# asp.net-core asp.net-core-webapi

使用Visual Studio 2017,我刚刚创建了一个简单的API项目,如下所示。在Startup.cs文件中,我有此代码。

public void ConfigureServices(IServiceCollection services) {

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

}
Run Code Online (Sandbox Code Playgroud)

有人可以请问一下含义是什么吗?我们需要保留此代码吗?

我认为MS应该添加一些注释以表明此类代码的作用。

SetCompatibilityVersion

Pie*_*ier 14

调用该AddMvc方法时,使用某些选项注册了几个组件。您调用一种方法,整个mvc框架被连接起来。

但是,如果将来MVC团队决定更改默认值,或者决定不再默认注册组件,或者更改此方法的预期副作用,则依赖该代码的用户代码将中断。为避免这种损坏,您可以调用set兼容性方法,mvc团队将使用该方法来保留提供给您的行为。

假设他们引入了一项新功能,该功能仅在您以2.3平台为目标时才存在:如果您的代码声明它以2.2 api为目​​标,则mvc团队将知道您没有使用该功能,因为那时该功能尚不存在。这样,就可以对应该提供什么以及如何提供做出安全的假设。

有关更多详细信息,请查看MSDN


And*_*ykh 12

仅供参考,SetCompatibilityVersion对于 .Net Core 3 或更高版本是无操作,在 .Net 6 中已弃用。

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

  • 我在文档中看到它说“.NET Core 3 无操作”,但没有说“或以后”。有人能澄清一下吗? (2认同)

Jim*_*Aho 8

Yennefer 的回答很棒,我将添加一些内容。

  • 对于 ASP.NET Core 2.X SetCompatibilityVersion,由于 Yennefer 描述的原因,很可能需要使用。

  • 对于 ASP.NET Core 3.0,它是空操作,这意味着它什么都不做。在这里阅读更多

  • 对于 ASP.NET Core 3.X(但不是 3.0)及更高版本,它可能具有值。在这里阅读更多