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

.NET 8 WorkerService配置重复值问题:为何出现重复输出?

.NET 8 WorkerService配置数组重复加载问题分析

问题描述

在.NET 8 WorkerService项目中,通过Host.CreateApplicationBuilder加载appsettings.json和appsettings.Development.json配置,其中Units配置节是包含多个对象的数组。绑定配置到Unit[]后,遍历输出路径时出现重复值,每个单元的路径都被打印两次。

代码示例

Program.cs

var builder = Host.CreateApplicationBuilder(args);

var units = builder.Configuration.GetSection("Units").Get<Unit[]>();

foreach (var unit in units)
{
    foreach (var item in unit.Paths)
    {
        Console.WriteLine(item);
    }
}

public record Unit(string Name, string[] Paths);

appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "Units": [
    {
      "name": "test1",
      "paths": [
        "p1",
        "p2",
        "p3"
      ]
    },
    {
      "name": "test2",
      "paths": [
        "p4",
        "p5",
        "p6"
      ]
    }
  ]
}

appsettings.Development.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}

预期与实际输出

预期输出

p1
p2
p3
p4
p5
p6

实际输出

p1
p2
p3
p1
p2
p3
p4
p5
p6
p4
p5
p6

问题成因

出现重复输出的核心原因是配置系统中Units数组被加载了两次,绑定后数组元素被合并(追加),最终Unit[]包含两组完全相同的单元对象。

具体可能的触发场景:

  • 配置源重复加载:项目中意外重复添加了同一配置文件(比如手动调用builder.Configuration.AddJsonFile("appsettings.json"),加上Host.CreateApplicationBuilder默认加载的一次),导致Units数组被读取两次并合并。
  • 环境配置或启动设置异常:launchSettings.json中配置了额外的配置源参数,或环境变量指定了重复的配置文件路径,导致同一配置被多次加载。
  • 项目文件复制设置问题:appsettings.json被设置为多次复制到输出目录,配置系统读取到多个相同的文件实例,进而重复加载数组内容。

另外,配置绑定对大小写不敏感(JSON中的name与record的Name可以正常匹配),这不会导致重复项,可排除属性名大小写的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:35:07