Ho le mie applicazioni web (PRODUZIONE, STAGING, TEST) ospitate sul server Web IIS. Quindi non è stato possibile fare affidamento sulla variabile di ambiente di sistema dell'operatore ASPNETCORE_ENVIRONMENT, poiché l'impostazione su un valore specifico (ad esempio STAGING) ha effetto su altre applicazioni.
Come soluzione, ho definito un file personalizzato (envsettings.json) all'interno della mia soluzione visualstudio:
con il seguente contenuto:
{
// Possible string values reported below. When empty it use ENV variable value or Visual Studio setting.
// - Production
// - Staging
// - Test
// - Development
"ASPNETCORE_ENVIRONMENT": ""
}
Quindi, in base al mio tipo di applicazione (Produzione, Staging o Test) ho impostato questo file in modo concorde: supponendo che sto implementando l'applicazione TEST, avrò:
"ASPNETCORE_ENVIRONMENT": "Test"
Successivamente, nel file Program.cs basta recuperare questo valore e quindi impostare l'ambiente di webHostBuilder:
public class Program
{
public static void Main(string[] args)
{
var currentDirectoryPath = Directory.GetCurrentDirectory();
var envSettingsPath = Path.Combine(currentDirectoryPath, "envsettings.json");
var envSettings = JObject.Parse(File.ReadAllText(envSettingsPath));
var enviromentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();
var webHostBuilder = new WebHostBuilder()
.UseKestrel()
.CaptureStartupErrors(true)
.UseSetting("detailedErrors", "true")
.UseContentRoot(currentDirectoryPath)
.UseIISIntegration()
.UseStartup<Startup>();
// If none is set it use Operative System hosting enviroment
if (!string.IsNullOrWhiteSpace(enviromentValue))
{
webHostBuilder.UseEnvironment(enviromentValue);
}
var host = webHostBuilder.Build();
host.Run();
}
}
Ricorda di includere envsettings.json in publishingOptions (project.json):
"publishOptions":
{
"include":
[
"wwwroot",
"Views",
"Areas/**/Views",
"envsettings.json",
"appsettings.json",
"appsettings*.json",
"web.config"
]
},
Questa soluzione mi rende libero di avere l'applicazione ASP.NET CORE ospitata sullo stesso IIS, indipendentemente dal valore della variabile di ambiente.
Properties\launchSettings.json
per simulare un altro ambiente per il debug in Visual Studio.