How to get root directory of project in asp.net core. Directory.GetCurrentDirectory() doesn't seem to work correctly on a mac

asp.net-core, c#

Solution

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);
}

Problem

My project has a folder structure to the tune of: - Project, - Project/data - Project/Engine - Project/Server - project/front-end In the server (running in the Project/Server folder) I refer to the folder like this: ``` var rootFolder = Directory.GetCurrentDirectory(); rootFolder = rootFolder.Substring(0, rootFolder.IndexOf(@"\Project\", StringComparison.Ordinal) + @"\Project\".Length); PathToData = Path.GetFullPath(Path.Combine(rootFolder, "Data")); var Parser = Parser(); var d = new FileStream(Path.Combine(PathToData, $"{dataFileName}.txt"), FileMode.Open); var fs = new StreamReader(d, Encoding.UTF8); ``` On my windows machine this code works fine since `Directory.GetCurrentDirectory()` reffered to the current folder, and doing ``` rootFolder.Substring(0, rootFolder.IndexOf(@"\Project\", StringComparison.Ordinal) + @"\Project\".Length); ``` gets me the root folder of the project (not the bin or debug folders). But when I ran it on a mac it got "`Directory.GetCurrentDirectory()`" sent me to /usr//[something else]. It didn't refer to the folder where my project lies. What is the correct way to find relative paths in my project? Where should I store the data folder in a way that it is easily accessible to all the sub projects in the solution - specifically to the kestrel server project? I prefer to not have to store it in the wwwroot folder because the data folder is maintained by a different member in the team, and I just want to access the latest version. What are my options?

Original source

Related problems