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

VS Code下C#控制台应用相对路径失效原因咨询

相对路径无法读取appsettings.json的原因及解决办法

核心原因:运行时工作目录与预期不符

问题本质是**.NET程序运行时的当前工作目录,并非你代码文件所在的项目目录**。VS Code默认会以你打开的根文件夹作为工作目录(比如你打开的是Chapter04-vscode文件夹),而你的appsettings.json在Instrumenting子目录里,直接写appsettings.json会在上级目录查找文件,自然找不到。

验证工作目录

先在代码中添加一行输出,确认实际工作路径:

Console.WriteLine($"当前工作目录:{Directory.GetCurrentDirectory()}");

运行后对比项目结构,就能明确相对路径失效的原因。

解决办法

方法1:使用对应工作目录的相对路径

根据实际工作目录调整路径。如果工作目录是Chapter04-vscode,正确的相对路径应为:

const string APP_SETTINGS = @"Instrumenting/appsettings.json";

方法2:基于程序集位置构建路径(推荐)

不依赖工作目录,直接从程序运行的输出目录读取文件,可靠性更高:

using System.Reflection;

// 获取当前程序集所在目录
var assemblyDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
// 拼接配置文件路径
var appSettingsPath = Path.Combine(assemblyDir, "appsettings.json");

if (File.Exists(appSettingsPath))
{
    // 剩余代码逻辑
}
else
{
    Console.WriteLine("File doesn't exist");
}

注意:需要确保appsettings.json被复制到输出目录,在.csproj文件中添加以下配置:

<ItemGroup>
  <None Update="appsettings.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

方法3:使用Microsoft.Extensions.Configuration的标准写法

如果你在用Microsoft配置扩展,直接用ConfigurationBuilder更简洁,同时规避工作目录问题:

using Microsoft.Extensions.Configuration;
using System.Reflection;

var assemblyDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var config = new ConfigurationBuilder()
    .SetBasePath(assemblyDir) // 基于程序集目录设置根路径
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .Build();

这种方式会自动处理文件查找,无需手动判断File.Exists。


内容的提问来源于stack exchange,提问作者willian kennedy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:52:29