How to get root directory of project in asp.net core. Directory.GetCurrentDirectory() doesn't seem to work correctly on a mac
Depending on where you are in the kestrel pipeline - if you have access to IConfiguration
(Startup.cs
constructor) or IWebHostEnvironment
(formerly IHostingEnvironment
) you can either inject the IWebHostEnvironment
into your constructor or just request the key from the configuration.
Inject IWebHostEnvironment
in Startup.cs
Constructor
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
var contentRoot = env.ContentRootPath;
}
Using IConfiguration in Startup.cs Constructor
public Startup(IConfiguration configuration)
{
var contentRoot = configuration.GetValue<string>(WebHostDefaults.ContentRootKey);
}
Working on .Net Core 2.2 and 3.0 as of now.
To get the projects root directory within a Controller:
Create a property for the hosting environment
private readonly IHostingEnvironment _hostingEnvironment;
Add Microsoft.AspNetCore.Hosting to your controller
using Microsoft.AspNetCore.Hosting;
Register the service in the constructor
public HomeController(IHostingEnvironment hostingEnvironment) { _hostingEnvironment = hostingEnvironment; }
Now, to get the projects root path
string projectRootPath = _hostingEnvironment.ContentRootPath;
To get the "wwwroot" path, use
_hostingEnvironment.WebRootPath
In some cases _hostingEnvironment.ContentRootPath
and System.IO.Directory.GetCurrentDirectory()
targets to source directory. Here is bug about it.
The solution proposed there helped me
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);