您现在的位置是:网站首页>编程语言
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提问等
上一篇: 消息队列的使用场景大概是怎样的?
评论文明上网,理性发言0条评论