You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:57:34