“ IHostingEnvironment”已经过时了

我将我的 ASP.NET Core 项目更新为.NET Core v3.0.0-preview3,现在我得到:

Cs (75,50,75,69) : 警告 CS0618: ‘ IHostingEnvironment’is 淘汰: “这种类型已经过时,将来会被淘汰。” 版本。建议的替代方案是 微软,AspNetCore,Hosting.IWebHostEnvironment

密码是:

public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
if (env.IsDevelopment()) {
…
}
}

现在正确的做法是什么? 是否有文档或示例来证明这一点?

64406 次浏览

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

此错误已在 3.0.0-预览3中通过将下列类型标记为过时并用新类型替换它们来解决。没有对新类型进行任何行为更改,只是命名。

过时类型(警告) :

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 < br/>

注意,新的 IHostEnvironment IsDevelopment、 IsProduction 等扩展方法在 Microsoft 中。分机。托管可能需要添加到应用程序中的名称空间。

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

资料来源: https://github.com/aspnet/AspNetCore/issues/7749

长话短说,你现在正在寻找 IWebHostEnvironment。你可能还需要增加使用 Microsoft.Extensions.Hosting

看起来 IHostingEnvironment已经被 IHostEnvironment(和其他一些)取代了。 您应该能够更改代码中的接口类型,并且一切都将按照以前的方式工作: -)

您可以在 GitHub 的这个链接上找到更多关于更改的信息 Https://github.com/aspnet/aspnetcore/issues/7749

剪辑 还有一个额外的接口 IWebHostEnvironment,可以在 ASP.NET Core 应用程序中使用。这在 Microsoft.AspNetCore.Hosting名称空间中可用。

对于 env.IsDevelopment(),我使用 env.EnvironmentName.Equals("Development")

在 ASP.NET Core 5中,使用:

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
if (Environments.Development.Equals(env.EnvironmentName))
{
...