Ich habe meine Webanwendungen (PRODUCTION, STAGING, TEST) auf dem IIS-Webserver gehostet. Daher war es nicht möglich, sich auf die Systemumgebungsvariable des ASPNETCORE_ENVIRONMENT-Agenten zu verlassen, da sich das Festlegen eines bestimmten Werts (z. B. STAGING) auf andere Anwendungen auswirkt.
Als Workaround habe ich eine benutzerdefinierte Datei (envsettings.json) in meiner Visualstudio-Lösung definiert:
mit folgendem Inhalt:
{
// Possible string values reported below. When empty it use ENV variable value or Visual Studio setting.
// - Production
// - Staging
// - Test
// - Development
"ASPNETCORE_ENVIRONMENT": ""
}
Dann setze ich diese Datei basierend auf meinem Anwendungstyp (Produktion, Staging oder Test) entsprechend ein: Angenommen, ich stelle die TEST-Anwendung bereit, habe ich:
"ASPNETCORE_ENVIRONMENT": "Test"
Rufen Sie danach in der Datei Program.cs einfach diesen Wert ab und legen Sie die Umgebung des webHostBuilder fest:
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();
}
}
Denken Sie daran, die Datei envsettings.json in die PublishOptions (project.json) aufzunehmen:
"publishOptions":
{
"include":
[
"wwwroot",
"Views",
"Areas/**/Views",
"envsettings.json",
"appsettings.json",
"appsettings*.json",
"web.config"
]
},
Mit dieser Lösung kann ich die ASP.NET CORE-Anwendung unabhängig vom Wert der Umgebungsvariablen auf demselben IIS hosten lassen.
Properties\launchSettings.json
zu simulieren eine andere Umgebung für das Debuggen in Visual Studio.