'IHostingEnvironment' is obsolete
asp.net Core.Net Coreasp.net Core-3.0asp.net Core Problem Overview
I updated my ASP.NET Core project to .NET Core v3.0.0-preview3, and I now get:
> Startup.cs(75,50,75,69): warning CS0618: 'IHostingEnvironment' is > obsolete: 'This type is obsolete and will be removed in a future > version. The recommended alternative is > Microsoft.AspNetCore.Hosting.IWebHostEnvironment.'
The code is:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
if (env.IsDevelopment()) {
…
}
}
What is the correct way to do this now? Are there any documentation or examples to demonstrate that?
asp.net Core Solutions
Solution 1 - asp.net Core
It seems IHostingEnvironment
has been replaced by IHostEnvironment
(and a few others).
You should be able to change the interface type in your code and everything will work as it used to :-)
You can find more information about the changes at this link on GitHub https://github.com/aspnet/AspNetCore/issues/7749
EDIT
There is also an additional interface IWebHostEnvironment
that can be used in ASP.NET Core applications. This is available in the Microsoft.AspNetCore.Hosting
namespace.
Solution 2 - asp.net Core
> When Microsoft.Extensions.Hosting
was introduced in 2.1 some types like IHostingEnvironment
and IApplicationLifetime
were copied from Microsoft.AspNetCore.Hosting
. Some 3.0 changes cause apps to include both the Microsoft.Extensions.Hosting
and Microsoft.AspNetCore.Hosting
namespaces. Any use of those duplicate types causes an "ambiguous reference" compiler error when both namespaces are referenced.
>
> This error has been addressed in 3.0.0-preview3 by marking the following types obsolete and replacing them with new types. There have not been any behavioral changes made for the new types, only naming.
>
> Obsolete types (warning):
>
> Microsoft.Extensions.Hosting.IHostingEnvironment
> Microsoft.AspNetCore.Hosting.IHostingEnvironment
> Microsoft.Extensions.Hosting.IApplicationLifetime
> Microsoft.AspNetCore.Hosting.IApplicationLifetime
> Microsoft.Extensions.Hosting.EnvironmentName
> Microsoft.AspNetCore.Hosting.EnvironmentName
>
> New types:
>
> Microsoft.Extensions.Hosting.IHostEnvironment
> Microsoft.AspNetCore.Hosting.IWebHostEnvironment : IHostEnvironment
> Microsoft.Extensions.Hosting.IHostApplicationLifetime
> Microsoft.Extensions.Hosting.Environments
>
> Note the new IHostEnvironment IsDevelopment, IsProduction, etc. extension methods are in the Microsoft.Extensions.Hosting namespace which may need to be added to your app.
>
> For 3.0 both the old and new types will be available from HostBulder's and WebHostBuilder's dependency injection containers. The old types will be removed in 4.0.
Source: https://github.com/aspnet/AspNetCore/issues/7749
Long and short, you're looking for IWebHostEnvironment
now. You'll likely need to add using for Microsoft.Extensions.Hosting
as well.
Solution 3 - asp.net Core
For env.IsDevelopment()
, I used env.EnvironmentName.Equals("Development")
Solution 4 - asp.net Core
From ASP.NET Core 5, use:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
if (Environments.Development.Equals(env.EnvironmentName))
{
...