ฉันมีเว็บแอปพลิเคชั่นของฉัน (PRODUCTION, STAGING, TEST) ที่โฮสต์บน IIS เว็บเซิร์ฟเวอร์ ดังนั้นจึงเป็นไปไม่ได้ที่จะพึ่งพาระบบตัวแปรสภาพแวดล้อมของ ASPNETCORE_ENVIRONMENT เนื่องจากการตั้งค่าเป็นค่าเฉพาะ (ตัวอย่างเช่น STAGING) มีผลกับแอปพลิเคชันอื่น
ในระหว่างการทำงานฉันได้กำหนดไฟล์ที่กำหนดเอง (envsettings.json) ภายในโซลูชัน visualstudio ของฉัน:
มีเนื้อหาดังต่อไปนี้:
{
// Possible string values reported below. When empty it use ENV variable value or Visual Studio setting.
// - Production
// - Staging
// - Test
// - Development
"ASPNETCORE_ENVIRONMENT": ""
}
จากนั้นขึ้นอยู่กับประเภทแอปพลิเคชันของฉัน (การผลิต, การจัดเตรียมหรือการทดสอบ) ฉันตั้งค่าไฟล์นี้ตามลำดับ: หากว่าฉันกำลังปรับใช้แอปพลิเคชันทดสอบฉันจะมี:
"ASPNETCORE_ENVIRONMENT": "Test"
หลังจากนั้นในไฟล์ Program.cs เพียงดึงค่านี้แล้วตั้งค่าสภาพแวดล้อมของ 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();
}
}
อย่าลืมรวม envsettings.json ใน publishOptions (project.json):
"publishOptions":
{
"include":
[
"wwwroot",
"Views",
"Areas/**/Views",
"envsettings.json",
"appsettings.json",
"appsettings*.json",
"web.config"
]
},
วิธีการแก้ปัญหานี้ทำให้ฉันมีอิสระที่จะมี ASP.NET CORE application บน IIS เดียวกันโดยไม่ขึ้นกับค่าตัวแปรสภาพแวดล้อม
Properties\launchSettings.json
เพื่อจำลองสภาพแวดล้อมอื่นสำหรับการดีบักใน Visual Studio