我已经在我的项目中添加了额外的 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 的人,WebHostBuilder
上都有方便的 .UseEnvironment(environmentName)
(位于 Program Main 中)。
只要针对项目中的构建配置设置了适当的编译符号,就可以执行类似这样的操作来确定环境名称:
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();
}
关于c# - 如何在 .NET Core MVC 项目中转换 appsettings.json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43073959/