您现在的位置是:网站首页>编程语言

netcore3.1提示IHostingEnvironment已过时

编程语言阿文2020年7月29日1343浏览

简介警告CS0618:'IHostingEnvironment'已过时:'此类型已过时,将在以后的版本中删除。建议的替代方案是Microsoft.AspNetCore.Hosting.IWebHostEnvironment。

           我在学习netcore过程种直接用新建netcore3.1的项目,刚开始没有指定sdk的版本,然后参照别人项目(netcore2.2升级到netcore3.1的项目)增加了一个全局异常过滤器:

        private readonly RequestDelegate next;
        private IHostingEnvironment environment;

        public ExceptionMiddleware(RequestDelegate next, IHostingEnvironment environment)
        {
            this.next = next;
            this.environment = environment;
        }
	private async Task HandleException(HttpContext context, Exception e)
        {
	    if (environment.IsDevelopment())
            {}
	}

 以上代码正常使用,可能是本地安装有netcore 2.2 sdk 的缘故吧,以上代码启动没有任何错误和警告提示,当我使用global.json 

{
   "sdk": {
     "version": "3.1.302"
   }
}

指定固定的sdk版本为3.1.302时(此版本号是通过cmd命令 dotnet --version获取到的)

启动程序时:警告CS0618:'IHostingEnvironment'已过时:'此类型已过时,将在以后的版本中删除。 建议的替代方案是Microsoft.AspNetCore.Hosting.IWebHostEnvironment。 

我把IHostingEnvironment改成IWebHostEnvironment时又提示 IWebHostEnvironment没有IsDevelopment方法。 

难道有什么问题?bing一番 找到netcore的官方社区有一个解释:  https://github.com/aspnet/AspNetCore/issues/7749

当在2.1中引入Microsoft.Extensions.Hosting时,从Microsoft.AspNetCore.Hosting复制了一些类型,如IHostingEnvironment和IApplicationLifetime 。 某些3.0更改会导致应用程序包含Microsoft.Extensions.Hosting和Microsoft.AspNetCore.Hosting命名空间。 在引用两个名称空间时,对这些重复类型的任何使用都会导致“模糊引用”编译器错误。

通过将以下类型标记为已废弃并将其替换为新类型,已在3.0.0-preview3中解决此错误。 没有对新类型进行任何行为更改,只是命名。

过时的类型(警告):

Microsoft.Extensions.Hosting.IHostingEnvironment

Microsoft.AspNetCore.Hosting.IHostingEnvironment

Microsoft.Extensions.Hosting.IApplicationLifetime

Microsoft.AspNetCore.Hosting.IApplicationLifetime

Microsoft.Extensions.Hosting.EnvironmentName

Microsoft.AspNetCore.Hosting.EnvironmentName

新类型:

Microsoft.Extensions.Hosting.IHostEnvironment

Microsoft.AspNetCore.Hosting.IWebHostEnvironment : IHostEnvironment

Microsoft.Extensions.Hosting.IHostApplicationLifetime

Microsoft.Extensions.Hosting.Environments

请注意,新的IHostEnvironment IsDevelopment,IsProduction等扩展方法位于Microsoft.Extensions.Hosting命名空间中,可能需要将其添加到您的应用程序中。

对于3.0,新旧类型都可以从HostBulder和WebHostBuilder的依赖注入容器中获得。 旧类型将在4.0中删除。

解决方法:

将IHostingEnvironment替换成IHostEnvironment后解决问题,看来以后学习netcore得多多看源码,及时关注社区github提问等


标签: C# netcore

2

评论文明上网,理性发言0条评论