DotNet6控制台程序发布后找不到appsettings.json的解决办法
.NET6控制台程序读取appsettings.json的正确配置方式
方案一:基于程序集执行目录配置(最可靠)
问题根源是Directory.GetCurrentDirectory()在部分场景(如Windows服务、计划任务)会指向系统目录而非程序发布目录,改用程序集所在目录作为配置基础路径即可:
static async Task Main(string[] args) { var execDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); var configuration = new ConfigurationBuilder() .SetBasePath(execDir) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); // 后续业务逻辑 }
方案二:使用.NET6通用主机(官方推荐)
.NET6推荐通过通用主机搭建控制台程序,主机默认会自动加载配置文件,无需手动处理路径:
static async Task Main(string[] args) { var host = Host.CreateDefaultBuilder(args) .ConfigureServices((context, services) => { // 在此注册业务服务,可通过context.Configuration直接获取配置 services.AddSingleton<YourBusinessService>(); }) .Build(); // 调用服务执行逻辑 var service = host.Services.GetRequiredService<YourBusinessService>(); await service.RunAsync(); await host.RunAsync(); }
Host.CreateDefaultBuilder(args)会自动加载以下配置源:
- 发布目录下的
appsettings.json - 环境专属配置文件
appsettings.{Environment}.json - 系统环境变量
- 命令行传入参数
方案三:硬编码绝对路径(仅临时测试用)
不推荐生产环境使用,但可用于快速验证:
var configuration = new ConfigurationBuilder() .AddJsonFile(@"D:\YourPublishFolder\appsettings.json") .Build();
额外检查项
- 确认
appsettings.json的Build Action为Content,Copy To Output Directory为Copy Always或Copy if newer - 若部署为Windows服务,需在服务属性中设置工作目录为程序发布路径
内容的提问来源于stack exchange,提问作者MC9000
相关产品推荐
相关产品推荐

