Tôi có các ứng dụng web của mình (SẢN XUẤT, STAGING, TEST) được lưu trữ trên máy chủ web IIS. Vì vậy, không thể dựa vào biến môi trường hệ thống của ASPNETCORE_ENVIRONMENT, bởi vì đặt nó thành một giá trị cụ thể (ví dụ STAGING) có hiệu lực đối với các ứng dụng khác.
Khi giải quyết, tôi đã xác định một tệp tùy chỉnh (envsinstall.json) trong giải pháp visualstudio của mình:
với nội dung sau:
{
// Possible string values reported below. When empty it use ENV variable value or Visual Studio setting.
// - Production
// - Staging
// - Test
// - Development
"ASPNETCORE_ENVIRONMENT": ""
}
Sau đó, dựa trên loại ứng dụng của tôi (Sản xuất, Dàn dựng hoặc Thử nghiệm) Tôi đặt tệp này một cách chính xác: giả sử tôi đang triển khai ứng dụng TEST, tôi sẽ có:
"ASPNETCORE_ENVIRONMENT": "Test"
Sau đó, trong tệp Program.cs chỉ cần truy xuất giá trị này và sau đó đặt môi trường của webhostBuilder's:
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();
}
}
Hãy nhớ bao gồm envsinstall.json trong PublishOptions (project.json):
"publishOptions":
{
"include":
[
"wwwroot",
"Views",
"Areas/**/Views",
"envsettings.json",
"appsettings.json",
"appsettings*.json",
"web.config"
]
},
Giải pháp này giúp tôi tự do lưu trữ ứng dụng ASP.NET CORE trên cùng IIS, độc lập với giá trị biến envoroment.
Properties\launchSettings.json
để mô phỏng một môi trường khác để gỡ lỗi trong Visual Studio.