我在项目中添加了其他json配置文件
appsettings.DEV.json
appsettings.QA.json
并根据环境将它们加载到
Startup
函数中:public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
...
而且我了解如何更改环境:在项目属性中修改
ASPNETCORE_ENVIRONMENT
环境变量的值。但是,似乎无法根据配置指定不同的环境变量,下拉列表标记为“N/A”并被禁用。我看到的唯一选择是手动更改环境变量值,以更改使用哪些应用程序设置。我敢肯定有一种方法可以自动执行此操作,否则您将如何使用CI? (除了使用脚本来更改环境变量外,还必须有一种更简单的方法)。
此处的目标是为三种环境(DEV,QA和PROD)设置自动化构建和持续集成。 DEV和QA位于同一台机器上,因此不能设置手动指定环境的环境变量。
最佳答案
从构建类型确定EnvironmentName
对于任何想根据构建类型设置EnvironmentName的人,.UseEnvironment(environmentName)
上都有方便的WebHostBuilder
(可在Program Main中找到)。
只要针对项目中的构建配置设置了适当的编译符号,您就可以执行以下操作来确定EnvironmentName:
public static void Main(string[] args)
{
string environmentName;
#if DEBUG
environmentName = "Development";
#elif STAGING
environmentName = "Staging";
#elif RELEASE
environmentName = "Production";
#endif
var host = new WebHostBuilder()
.UseKestrel()
.UseEnvironment(environmentName)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
host.Run();
}