.NET 6控制台应用如何指定要使用的appsettings.json文件
.NET 6控制台应用通过命令行指定环境读取配置
核心实现步骤
1. 配置主机(推荐规范方式)
在控制台应用的Program.cs中使用Host.CreateDefaultBuilder构建主机,它会自动处理命令行参数、环境变量,并按优先级加载对应环境的appsettings.{Environment}.json文件:
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; var host = Host.CreateDefaultBuilder(args) .ConfigureServices((context, services) => { // 获取当前环境信息 var currentEnv = context.HostingEnvironment; Console.WriteLine($"当前运行环境:{currentEnv.EnvironmentName}"); // 示例:读取配置项 var testConfigValue = context.Configuration["TestSetting"]; Console.WriteLine($"配置项值:{testConfigValue}"); }) .Build(); await host.RunAsync();
2. 命令行直接指定环境
Windows下直接通过--environment参数(或缩写-e)启动应用,命令如下:
dotnet mydotnetconsoleapp.dll --environment=Staging
3. 批处理文件封装
创建批处理文件(比如run-staging.bat),避免每次手动输入参数:
@echo off echo 启动Staging环境应用... dotnet mydotnetconsoleapp.dll --environment=Staging pause
常见问题排查
如果之前使用--environment参数未生效,大概率是代码未采用Host.CreateDefaultBuilder构建配置体系,而是手动读取配置。这种情况需要手动解析命令行参数:
using Microsoft.Extensions.Configuration; // 解析命令行参数获取环境名称 string envName = "Production"; // 设置默认环境 var args = Environment.GetCommandLineArgs(); foreach (var arg in args) { if (arg.StartsWith("--environment=", StringComparison.OrdinalIgnoreCase)) { envName = arg.Split('=')[1]; break; } } // 手动构建配置加载链 var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false) .AddJsonFile($"appsettings.{envName}.json", optional: true) .Build(); // 验证配置加载结果 Console.WriteLine($"当前环境:{envName}"); Console.WriteLine($"配置项值:{config["TestSetting"]}");
替代方案:临时设置环境变量
如果不想用命令行参数,也可以在批处理中临时设置ASPNETCORE_ENVIRONMENT环境变量(仅当前会话有效,不会修改系统全局变量):
@echo off set ASPNETCORE_ENVIRONMENT=Staging dotnet mydotnetconsoleapp.dll pause
内容的提问来源于stack exchange,提问作者Zahir J
相关产品推荐
相关产品推荐

