“ IHostingEnvironment”已过时

kof*_*fus 22 .net-core asp.net-core asp.net-core-3.0

我将项目更新为.NETCORE v3.0.0-preview3,现在得到:

Startup.cs(75,50,75,69):警告CS0618:'IHostingEnvironment'已过时:'此类型已过时,将在以后的版本中删除。推荐的替代方法是Microsoft.AspNetCore.Hosting.IWebHostEnvironment。

代码是:

public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
  if (env.IsDevelopment()) {
    ...
Run Code Online (Sandbox Code Playgroud)

现在正确的方法是什么?是否有任何文档/示例来显示?

Chr*_*att 41

Microsoft.Extensions.Hosting在2.1中引入某些类型的喜欢IHostingEnvironmentIApplicationLifetime来自被复制Microsoft.AspNetCore.Hosting。某些3.0更改导致应用程序同时包含Microsoft.Extensions.HostingMicrosoft.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中删除。

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

总之,您正在寻找IWebHostEnvironment。您可能还需要添加for Microsoft.Extensions.Hosting

  • 仅供参考,微软指出将跳过 .NET CORE 4.0,以避免与 .NET Framework 4.0 混淆。相反,.NET Core 3.x 之后的下一个版本是 .NET 5.0。https://github.com/dotnet/core/blob/master/roadmap.md (4认同)

Sim*_*Ged 20

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

您可以在GitHub https://github.com/aspnet/AspNetCore/issues/7749上的此链接中找到有关更改的更多信息。

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

  • 上面答案中的一个快速拼写错误,IHostingEnvironment 被 IWebHostEnvironment 替换。并且需要使用新的命名空间“using Microsoft.Extensions.Hosting;”。 (2认同)
  • `IHostEnvironment` 和 `IWebHostEnviornment` 之间有什么区别,我问自己:“尽可能使用 IHostEnvironment,当需要访问 WebRootPath 或 WebRootFileProvider 属性时使用 IWebHostEnvironment。” https://andrewlock.net/ihostingenvironment-vs-ihost- net-core-3 中的环境过时类型/ (2认同)

小智 5

从 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))
    {
        ...
Run Code Online (Sandbox Code Playgroud)

  • @JeremyCaney是的,如果包含一些解释,这肯定会是一个更好的答案,并且仅代码答案必然是不完整的答案。但OP提供了一些代码,然后明确询问:“_现在执行此操作的正确方法是什么?_”。虽然其他答案和评论提供了 ASP.NET 更改的讨论和详细信息,但这是通过发布修订后的代码直接回答所提出问题的唯一答案。其他答案或评论都没有提供“Configure()”的修订实现。 (3认同)