.NET Framework 4.8控制台应用实现appsettings.json环境变换及POCO读取
.NET Framework 实现多环境 appsettings.json 配置方案
完全可以通过环境变量或**Configuration Manager(原App.Config配置)**来指示ConfigurationBuilder加载对应环境的配置文件,以下是干净、可落地的实现方案:
1. 基础依赖准备
先安装必要的NuGet包:
Install-Package Microsoft.Extensions.Configuration Install-Package Microsoft.Extensions.Configuration.Json Install-Package Microsoft.Extensions.Configuration.EnvironmentVariables
2. 核心配置加载逻辑
在控制台入口项目中,通过ConfigurationBuilder实现基础配置+环境配置分层覆盖(环境配置会覆盖基础配置中同名项),同时支持通过环境变量或App.Config指定当前环境:
using Microsoft.Extensions.Configuration; using System; using System.Configuration; using System.IO; class Program { static void Main(string[] args) { // 1. 获取当前环境标识:优先取环境变量,其次取App.Config,默认Development var environment = Environment.GetEnvironmentVariable("ENVIRONMENT") ?? ConfigurationManager.AppSettings["Environment"] ?? "Development"; // 2. 构建配置加载链 var config = new ConfigurationBuilder() .SetBasePath(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)) // 加载基础配置(必填) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) // 加载对应环境的配置(可选,覆盖基础配置) .AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true) // 最后加载环境变量(优先级最高,用于紧急覆盖) .AddEnvironmentVariables() .Build(); // 示例:读取配置项 var apiUrl = config["Api:BaseUrl"]; Console.WriteLine($"当前环境:{environment},接口地址:{apiUrl}"); } }
3. 不同环境的切换实现
调试环境(VS开发时)
- 方式1:用环境变量
右键控制台项目 → 属性 → 调试 → 环境变量,添加ENVIRONMENT变量,值设为Development/UAT/Production,调试时自动生效。 - 方式2:用App.Config + 配置变换
在App.Config中添加环境标识:
借助SlowCheetah工具(VS扩展)创建App.Config的变换文件(如<appSettings> <add key="Environment" value="Development" /> </appSettings>App.UAT.config、App.Production.config),变换Environment的值,调试时选择对应变换配置即可。
发布/UAT环境
- 方式1:系统环境变量
在部署机器上设置系统环境变量ENVIRONMENT为对应环境值(如UAT),启动控制台程序时自动读取。 - 方式2:启动脚本指定
创建启动批处理文件,先设置环境变量再启动程序:set ENVIRONMENT=UAT YourConsoleApp.exe - 方式3:App.Config变换
发布时通过SlowCheetah变换App.Config的Environment值,部署后程序会读取该值加载对应json配置。
4. 注意事项
- 确保所有
appsettings*.json文件的属性设置为复制到输出目录:如果较新则复制,避免部署时缺失配置文件。 - 环境配置文件设为可选(代码中
optional: true),若某个环境无单独配置,会自动 fallback 到基础配置。 - 优先级顺序:环境变量 > 环境json配置 > 基础json配置 > App.Config,可根据需求调整加载顺序。
内容的提问来源于stack exchange,提问作者Imran K
相关产品推荐
相关产品推荐

