asp.net Web API核心项目启动类里面的SetCompatibilityVersion是啥
Posted
技术标签:
【中文标题】asp.net Web API核心项目启动类里面的SetCompatibilityVersion是啥【英文标题】:What is SetCompatibilityVersion inside of the startup class of asp.net Web API core projectasp.net Web API核心项目启动类里面的SetCompatibilityVersion是什么 【发布时间】:2019-06-09 04:05:19 【问题描述】:使用 Visual Studio 2017,我刚刚创建了一个简单的 API 项目,如下所示。 在 Startup.cs 文件中,我有这段代码。
public void ConfigureServices(IServiceCollection services)
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
有人可以说明什么是手段吗?我们需要保留此代码吗?
我认为 MS 应该放一些 cmets 来表明这样的代码是做什么的。
【问题讨论】:
我看到这篇帖子docs.microsoft.com/en-us/aspnet/core/mvc/…“通过选择加入,您可以获得最新的行为,以及 ASP.NET Core 的长期行为”,否则 SetCompatibilityVersion 方法允许应用选择- 加入或退出 ASP.NET Core MVC 2.1 或更高版本中引入的潜在破坏性行为更改。 ....因此,上述代码将兼容模式设置为 ASP.NET Core 2.2。 你们说的兼容模式和optin optout是什么意思 【参考方案1】:仅供参考,SetCompatibilityVersion
是 .Net Core 3 或更高版本的无操作,在 .Net 6 中已弃用。
https://docs.microsoft.com/en-us/aspnet/core/mvc/compatibility-version?view=aspnetcore-5.0
【讨论】:
【参考方案2】:Yennefer 的回答很好,我只是补充一些东西。
对于 ASP.NET Core 2.X,很可能需要使用 SetCompatibilityVersion
,因为 Yennefer 所描述的原因。
对于 ASP.NET Core 3.0,它是无操作的,这意味着它绝对什么都不做。 Read more here.
对于 ASP.NET Core 3.X(但不是 3.0)及更高版本,它可能有一个值。 Read more here
【讨论】:
那么对于Core 5及更高版本是否应该使用它?或者我们可以删除它? 在我看来,微软还没有更新their official docs@Eru,所以我不知道。但是,如果您发现了什么,请在此处提供链接,我可以更新答案 当然,但现在我刚刚删除了设置的那部分,所有看起来都没有问题。但我猜在某些运行时场景中会发生任何可能的中断/错误;使用旧的 nugets 等。【参考方案3】:当您调用AddMvc
方法时,会使用某些选项注册多个组件。你调用一个方法,整个 mvc 框架就连接好了。
但是,如果 mvc 团队将来决定更改默认值,或者决定不再默认注册组件,或者更改此方法的预期副作用,则依赖于该方法的用户代码将休息。为避免此类破坏,您可以调用设置兼容性方法,mvc 团队将使用该方法来保留提供给您的行为。
假设他们引入了一个新功能,该功能仅在您针对 2.3 平台时存在:如果您的代码声明它针对 2.2 api,mvc 团队将知道您没有使用该功能,因为它不存在于那时。这样就可以对应该提供什么以及如何提供做出安全的假设。
更多详情请关注MSDN。
【讨论】:
很遗憾没有明确描述更改版本_2_1时会破坏什么(这对开发人员来说是最重要的)版本_2_2以上是关于asp.net Web API核心项目启动类里面的SetCompatibilityVersion是啥的主要内容,如果未能解决你的问题,请参考以下文章