Asp.net core Namespace.AspNetCore.Hosting与Extensions.Hosting

Asp.net core Namespace.AspNetCore.Hosting与Extensions.Hosting,asp.net-core,Asp.net Core,在我的ASP.NET Core 2.0项目中,我一直在使用Microsoft.Extensions.Hosting命名空间中的IHostingEnvironment和IApplicationLifetime 在ASP.NET Core 2.1中,这些接口似乎位于Microsoft.AspNetCore.Hosting和Microsoft.Extensions.Hosting命名空间中。区别是什么?我应该使用哪个名称空间 仅供参考,我还使用了BackgroundService类,该类现在位于Mic

在我的ASP.NET Core 2.0项目中,我一直在使用Microsoft.Extensions.Hosting命名空间中的IHostingEnvironment和IApplicationLifetime

在ASP.NET Core 2.1中,这些接口似乎位于Microsoft.AspNetCore.Hosting和Microsoft.Extensions.Hosting命名空间中。区别是什么?我应该使用哪个名称空间


仅供参考,我还使用了BackgroundService类,该类现在位于Microsoft.Extensions.Hosting命名空间中(Core 2.1)。

自ASP.NET Core 2.0以来,有:

  • 我们一直使用的ASP.NET核心web托管模型:它位于
    Microsoft.AspNetCore.hosting
    命名空间中
  • 一种新的通用托管模型,用于支持其他应用程序(如控制台应用程序和Windows服务)中的基础结构和交叉关注点:它位于
    Microsoft.Extensions.hosting
    命名空间中
两个不同的模型之间存在一些接口和其他类型的重复。对于web应用程序,通常应使用
Microsoft.AspNetCore.Hosting
命名空间中的类型,但
IHostedService
BackgroundService
和其他相关类型除外


在将尽可能多的类型和逻辑转移到通用托管模型并改进两者之间的兼容性方面仍有工作要做。例如,web托管模型中的
IHostingEnvironment
IApplicationLifetime
可能会在将来的版本中出现在通用托管模型中。

本文还对其进行了解释,并解释了.NET Core 3中的情况:

基本上在.NETCore3中,两个接口都被标记为过时

它们被替换如下:

  • Microsoft.Extensions.Hosting.IHostingEnvironment(.NET Core 2.x)
    使用Microsoft.Extensions.Hosting.IHostEnvironment(.NET Core 3.x)
  • Microsoft.AspNetCore.Hosting.IHostingEnvironment(.NET Core 2.x)
    使用Microsoft.AspNetCore.Hosting.IWebHostEnvironment(.NET Core 3.x),它现在继承自IHostEnvironment

好处:在.NET Core 3中,IHostEnvironment在所有应用程序中都兼容。

在2.2中效果如何?我们现在应该看看Microsoft.Extensions.Hosting吗?专门针对IHostingEnvironment。使用Core 2.2,这完全是一场噩梦,当我们同时托管web应用程序和控制台应用程序,而您无法获得相同的IHostingEnvironment或IHostBuilder界面时,这是一团混乱。目前,文档中说:有两台主机可用:通用主机和web主机。建议使用通用主机,Web主机仅用于向后兼容。