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

.NET Core 3单文件Web API如何读取同目录下的appsettings.json?

解决.NET Core 3.0单文件Web API读取同目录appsettings.json的问题

你遇到的问题非常典型——.NET Core 3.0的单文件发布机制会把程序自动解压到系统临时目录运行,常规的路径获取方法(比如Directory.GetCurrentDirectory()、environment.ContentRootPath)都会指向这个临时目录,而非你exe实际所在的发布目录,自然找不到同目录下的appsettings.json。

正确的解决方案

要获取exe实际所在的目录,我们需要直接读取当前进程的主模块路径,这个路径会精准指向你发布目录下的APPNAME.exe,而非临时目录里的解压副本。具体步骤如下:

  1. 添加必要的命名空间:在Program.cs顶部引入以下命名空间:
using System.Diagnostics;
using System.IO;
  1. 修改配置构建逻辑:在CreateHostBuilder方法中,替换默认的配置源,手动指定配置文件的基础路径为exe所在目录:
public static IHostBuilder CreateHostBuilder(string[] args)
{
    // 获取当前运行的exe的完整路径
    var exeFullPath = Process.GetCurrentProcess().MainModule.FileName;
    // 提取exe所在的目录
    var publishDirectory = Path.GetDirectoryName(exeFullPath);

    return Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, config) =>
        {
            // 清除默认配置源,避免和自定义配置冲突
            config.Sources.Clear();
            
            // 添加同目录的appsettings.json文件
            config.SetBasePath(publishDirectory)
                  .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                  // 可选:添加环境对应的配置文件(比如appsettings.Development.json)
                  .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: true)
                  // 保留命令行参数支持
                  .AddCommandLine(args);
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });
}

为什么这个方法有效?

Process.GetCurrentProcess().MainModule.FileName会直接获取到用户实际启动的exe路径——也就是你发布目录下的APPNAME.exe,而非临时目录里的解压文件。通过这个路径提取的目录,正好就是appsettings.json所在的目录,这样配置系统就能正确找到目标文件了。

验证效果

重新用你的发布命令打包:

dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true

把appsettings.json放在生成的APPNAME.exe同目录下,运行exe就不会再出现FileNotFoundException了。

内容的提问来源于stack exchange,提问作者Jason Yandell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:08:52