Problema
Quando provo ad aggiungere una migrazione al mio codice, ad esempio: le dnx ef migrations add initial
,
env.WebRootPath
in Startup(IHostingEnvironment env)
è nullo.
Questo mi darà errori di compilazione quando aggiungo una nuova migrazione o aggiorno il database.
Il codice
Nella classe Startup.cs ho queste linee nel costruttore:
public Startup(IHostingEnvironment env)
{
// ...
MyStaticClass.Initialize(env.WebRootPath);
// ...
_hostingEnvironment = env;
}
Qui env.WebRootPath
è null e nella funzione Initialize
si genera un'eccezione.
Nella funzione ConfiguraServices di Startup.cs risolvo le mie dipendenze di classe:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddInstance<IMyService>(new MyService(_hostingEnvironment.WebRootPath))
// Note: _hostingEnvironment is set in the Startup constructor.
// ...
}
Gli appunti
Posso creare, eseguire e distribuire il codice bene. Tutto funziona!
Tuttavia ho apportato una modifica al modello e voglio aggiungere una migrazione con questo comando: le dnx ef migrations add MyMigration
quindi vedo gli errori di compilazione nella console del gestore pacchetti.
Sto usando l'applicazione Web ASP 5 e Entity Framework 7
C'è un problema segnalato su github riguardo al mio problema:
https://github.com/aspnet/EntityFramework/issues/4494
Ho usato la soluzione alternativa nei commenti ora sembra funzionare bene:
if (string.IsNullOrWhiteSpace(_env.WebRootPath))
{
env.WebRootPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot");
}
Env.WebRootPath può anche essere nullo se la cartella wwwroot è stata inavvertitamente rimossa dalla radice del progetto. L'aggiunta di una cartella wwwroot alla radice del progetto risolverà anche questo problema.