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

MacOS下VS Code中C#项目无法加载local.settings.json值

问题描述

MacOS系统下,在VS Code中运行C#(.NET 8)项目时,调用GetConnectionString("MyDatabase")返回null,但该代码在Mac的JetBrains Rider和Windows的Visual Studio中可正常运行。已安装C# Dev Kit并按教程完成配置、重建和测试,仍无法解决问题,同时使用.NET 8启动项目存在额外问题,需明确如何在VS Code中正确加载、使用local.settings.json中的配置值。

涉及代码片段:

services
    .AddOptions<MySettings>()
    .Configure<IConfiguration>( (settings, configuration) => 
        configuration.GetSection("MySection").Bind( settings ) );

var connectionString = hostBuilderContext.Configuration
    .GetConnectionString( "MyDatabase" );
解决方案步骤
  • 确认local.settings.json的格式与位置

    1. 确保文件放置在项目根目录,连接字符串需嵌套在ConnectionStrings节点下,格式示例:
      {
        "ConnectionStrings": {
          "MyDatabase": "你的数据库连接字符串内容"
        },
        "MySection": {
          // 与MySettings类匹配的配置项
        }
      }
      
    2. 在项目文件(.csproj)中配置文件复制规则,确保文件能输出到编译目录:
      <ItemGroup>
        <None Update="local.settings.json">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
      </ItemGroup>
      
  • 显式配置.NET加载local.settings.json
    在启动代码中(Program.cs),让配置构建器明确加载该文件,示例:

    var host = Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, config) =>
        {
            // 加载local.settings.json,可选且支持热重载
            config.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true);
            // 开发环境可添加用户机密(可选)
            if (context.HostingEnvironment.IsDevelopment())
            {
                config.AddUserSecrets<Program>();
            }
        })
        .ConfigureServices((context, services) =>
        {
            services.AddOptions<MySettings>()
                .Configure<IConfiguration>((settings, configuration) =>
                    configuration.GetSection("MySection").Bind(settings));
        })
        .Build();
    

    注意:MySettings类的属性名称需与MySection节点下的配置项严格匹配(大小写敏感)。

  • 检查VS Code调试配置
    打开.vscode/launch.json,确保调试工作目录指向项目根目录,且环境变量未覆盖配置:

    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": ".NET Core Launch (console)",
          "type": "coreclr",
          "request": "launch",
          "preLaunchTask": "build",
          "program": "${workspaceFolder}/bin/Debug/net8.0/你的项目名称.dll",
          "args": [],
          "cwd": "${workspaceFolder}",
          "console": "internalConsole",
          "stopAtEntry": false,
          "env": {
            "ASPNETCORE_ENVIRONMENT": "Development"
          }
        }
      ]
    }
    

    重点确认cwd值为${workspaceFolder},保证程序能找到根目录下的local.settings.json。

  • 排查.NET 8特定问题

    1. 若使用.NET 8顶级语句,确保配置加载顺序正确:先加载配置文件,再获取连接字符串,示例:
      var builder = WebApplication.CreateBuilder(args);
      // 先加载local.settings.json
      builder.Configuration.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true);
      // 再获取连接字符串
      var connectionString = builder.Configuration.GetConnectionString("MyDatabase");
      // 后续服务配置
      builder.Services.AddOptions<MySettings>()
          .Configure<IConfiguration>((settings, config) =>
              config.GetSection("MySection").Bind(settings));
      var app = builder.Build();
      
    2. 检查.csproj文件,确保未添加禁用配置绑定的设置,如<DisableConfigurationBindingGenerator>true</DisableConfigurationBindingGenerator>,这类设置会影响Options的绑定逻辑。
  • 验证配置加载状态
    在代码中添加调试输出,确认配置源和连接字符串是否正确加载:

    // 打印所有配置源类型
    foreach (var provider in hostBuilderContext.Configuration.Providers)
    {
        Console.WriteLine($"配置源: {provider.GetType().Name}");
    }
    // 打印连接字符串
    var connectionString = hostBuilderContext.Configuration.GetConnectionString("MyDatabase");
    Console.WriteLine($"连接字符串: {connectionString ?? "未找到"}");
    

    运行项目后查看控制台输出,确认JsonConfigurationProvider(对应local.settings.json)是否在配置源列表中,以及连接字符串是否正常读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:12:06