Web uygulamalarım (ÜRETİM, SAHNE, TEST) IIS web sunucusunda barındırılıyor. Bu nedenle, ASPNETCORE_ENVIRONMENT işlemcisinin sistem ortam değişkenine güvenmek mümkün değildi, çünkü onu belirli bir değere ayarlamak (örneğin, STAGING) diğer uygulamalar üzerinde etkiye sahiptir.
Çözüm olarak, visualstudio çözümümde özel bir dosya (envsettings.json) tanımladım:
aşağıdaki içeriğe sahip:
{
// Possible string values reported below. When empty it use ENV variable value or Visual Studio setting.
// - Production
// - Staging
// - Test
// - Development
"ASPNETCORE_ENVIRONMENT": ""
}
Ardından, uygulama tipime (Üretim, Aşama veya Test) göre bu dosyayı uygun şekilde ayarladım: TEST uygulamasını dağıttığımı varsayarsak, şunlara sahip olacağım:
"ASPNETCORE_ENVIRONMENT": "Test"
Bundan sonra, Program.cs dosyasında sadece bu değeri alın ve ardından webHostBuilder'ın ortamını ayarlayın:
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();
}
}
Envsettings.json dosyasını publishOptions'a (project.json) dahil etmeyi unutmayın:
"publishOptions":
{
"include":
[
"wwwroot",
"Views",
"Areas/**/Views",
"envsettings.json",
"appsettings.json",
"appsettings*.json",
"web.config"
]
},
Bu çözüm, ASP.NET CORE uygulamasının envoroment değişken değerinden bağımsız olarak aynı IIS üzerinde barındırılmasına izin vermemi sağlıyor.
Properties\launchSettings.json
için simüle Visual Studio hata ayıklama için bir başka ortam.