Мои веб-приложения (ПРОИЗВОДСТВО, ЭТАП, ТЕСТ) размещены на веб-сервере 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 на одном и том же IIS, независимо от значения переменной окружения.
Properties\launchSettings.json
для моделирования другой среды для отладки в Visual Studio.