Este dilema se puede tratar de diversas formas, pero te dejamos la resolución más completa para nosotros.
Solución:
Dependiendo de dónde se encuentre en la tubería del cernícalo, si tiene acceso a IConfiguration
(Startup.cs
constructor) o IWebHostEnvironment
(antes IHostingEnvironment
) puede inyectar el IWebHostEnvironment
en su constructor o simplemente solicite el key de la configuración.
Inyectar IWebHostEnvironment
en Startup.cs
Constructor
public Startup(IConfiguration configuration, IWebHostEnvironment env)
var contentRoot = env.ContentRootPath;
Uso de IConfiguration en Startup.cs Constructor
public Startup(IConfiguration configuration)
var contentRoot = configuration.GetValue(WebHostDefaults.ContentRootKey);
Trabajando en .Net Core 2.2 y 3.0 a partir de ahora.
Para obtener el directorio raíz de los proyectos dentro de un Controlador:
-
Crear una propiedad para el entorno de alojamiento.
private readonly IHostingEnvironment _hostingEnvironment;
-
Agregue Microsoft.AspNetCore.Hosting a su controlador
using Microsoft.AspNetCore.Hosting;
-
Registrar el servicio en el constructor.
public HomeController(IHostingEnvironment hostingEnvironment) _hostingEnvironment = hostingEnvironment;
-
Ahora, para obtener la ruta raíz del proyecto
string projectRootPath = _hostingEnvironment.ContentRootPath;
Para obtener el “wwwroot” camino, uso
_hostingEnvironment.WebRootPath
En algunos casos _hostingEnvironment.ContentRootPath
y System.IO.Directory.GetCurrentDirectory()
objetivos al directorio de origen. Aquí hay un error al respecto.
La solución propuesta allí me ayudó.
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);