Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net Web API核心项目的启动类中的SetCompatibilityVersion是什么_C#_Asp.net Core_Asp.net Core Webapi - Fatal编程技术网

C# asp.net Web API核心项目的启动类中的SetCompatibilityVersion是什么

C# asp.net Web API核心项目的启动类中的SetCompatibilityVersion是什么,c#,asp.net-core,asp.net-core-webapi,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); } 有人能解释一下这是什么意思吗?我们需要保留这个代码吗 我认为微软应该发表一

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

public void ConfigureServices(IServiceCollection services) {

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

}
有人能解释一下这是什么意思吗?我们需要保留这个代码吗

我认为微软应该发表一些评论来说明这些代码的作用


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

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

假设他们引入了一个新特性,该特性仅在您针对2.3平台时存在:如果您的代码声明它针对2.2 api,mvc团队将知道您没有使用该特性,因为它当时不存在。通过这种方式,可以对应该提供什么以及如何提供做出安全的假设


有关更多详细信息,请参阅。

Yennefer的回答很好,我只想补充一些内容

  • 对于ASP.NET Core 2.X,可能需要使用
    SetCompatibilityVersion
    ,原因如上所述

  • 对于ASP.NET Core 3.0来说,它是一个no-op,这意味着它完全不做任何事情

  • 对于ASP.NET Core 3.X(但不是3.0)和forward,它可能有一个值


我看到了这篇文章“通过选择,您可以获得ASP.NET Core的最新行为和长期行为”,否则SetCompatibilityVersion方法允许应用程序选择加入或退出ASP.NET Core MVC 2.1或更高版本中引入的潜在破坏性行为更改……因此,上面的代码将兼容模式设置为ASP.NET Core 2.2。你们所说的兼容模式和optin optoutIt是什么意思?遗憾的是,没有明确描述在更改版本2\u 1版本2\u 2时会出现什么问题(这对开发人员来说是最重要的)