如何配置ASP.NET Core实现两个已部署应用的差异化配置
ASP.NET 原生就支持自定义任意名称的部署环境,完全可以沿用你熟悉的 appsettings 配置覆盖逻辑,不需要额外修改核心启动代码,按以下步骤操作即可:
- 第一步:创建自定义配置文件
直接在项目根目录新建appsettings.Demo.json,把演示站点需要覆盖的配置(包括独立的数据库连接字符串)写到这个文件中。右键该文件选择「属性」,将「复制到输出目录」设置为「如果较新则复制」,保证发布时这个文件会被打包到部署包中。 - 第二步:部署时为不同站点指定环境标识
ASP.NET 依靠ASPNETCORE_ENVIRONMENT环境变量识别当前运行环境,你只需要给正式站点和演示站点分别设置不同的环境变量值即可:- 正式站点设置变量值为
Production,默认加载appsettings.Production.json覆盖配置,没有额外覆盖配置的话会直接加载公共的appsettings.json - 演示站点设置变量值为
Demo,会自动加载appsettings.Demo.json的配置覆盖公共配置
不同部署场景的设置方式: - IIS 部署:在站点的
web.config的<aspNetCore>节点下添加子节点:<environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Demo" /> </environmentVariables> - Linux systemd 托管:在对应的 .service 配置文件的
[Service]段添加Environment=ASPNETCORE_ENVIRONMENT=Demo - Docker 部署:启动容器时加参数
-e ASPNETCORE_ENVIRONMENT=Demo即可
本地测试时可以在launchSettings.json中新增启动配置,将环境变量设为 Demo,就能本地调试演示站点的配置逻辑。
- 正式站点设置变量值为
- 第三步:执行 EF Core Migrations 时指定环境
直接在 dotnet ef 命令后加--environment参数指定对应环境即可,命令会自动读取对应配置文件的连接字符串执行操作,示例:# 执行演示站点的数据库迁移 dotnet ef database update --environment Demo # 执行正式站点的数据库迁移 dotnet ef database update --environment Production
这套逻辑是 .NET 自带的默认配置加载逻辑,不需要你修改 Program.cs 里的任何配置初始化代码,优先级和你熟悉的 Development 环境完全一致:优先加载 appsettings.json,随后加载 appsettings.{当前环境}.json 覆盖同名配置,完全满足你分文件管理不同站点配置的需求。
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

