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

Linux下运行ASP.NET Core API报错:重复键已添加(Key: environment)

解决方案

这个错误的核心是配置字典里重复添加了environment键,只在Linux上触发的原因,大概率是不同平台下JSON解析逻辑或环境变量处理的差异导致的。下面是分步排查和解决方法:

1. 检查配置文件中的重复键

JSON规范明确禁止同一层级出现重复键,但不同解析器的容错性不一样:Windows上的.NET可能会自动覆盖重复的键,而Linux上的.NET Core会严格解析并尝试添加所有重复条目,最终导致字典冲突。

  • 打开你的host.json和appsettings.json文件,搜索"environment",确认同一层级下没有重复定义这个键。比如要避免这种错误写法:
    {
      "environment": "Development",
      "Logging": {
        "LogLevel": {
          "Default": "Warning"
        }
      },
      "environment": "Production" // 重复键,Linux解析时会触发异常
    }
    
  • 发现重复键后,删除多余条目,只保留一个即可。

2. 排查Linux环境变量冲突

Linux环境变量是大小写敏感的,如果系统中存在名为environment的环境变量,可能会和配置中的键意外冲突(即使你没显式添加环境变量配置源,WebHostBuilder的默认逻辑也可能加载它)。

  • 执行命令检查当前是否存在这个环境变量:
    echo $environment
    
  • 如果输出非空内容,说明存在冲突变量,先临时清除再测试启动:
    unset environment
    sudo dotnet Project.dll
    
  • 如果问题解决,建议修改这个环境变量的名称(避免使用environment这种通用名称),或者在配置构建时明确排除它。

3. 调整配置构建逻辑

你当前手动构建配置并通过UseConfiguration传入WebHostBuilder,可能会和WebHost的默认配置源合并时出现冲突。改用WebHostBuilder内置的ConfigureAppConfiguration方法管理配置,能更稳妥地处理合并逻辑:

修改Program.cs代码如下:

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .ConfigureAppConfiguration((context, config) =>
        {
            config.SetBasePath(Directory.GetCurrentDirectory())
                  .AddJsonFile("host.json", optional: true)
                  .AddJsonFile("appsettings.json", optional: true);
        })
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();
    host.Run();
}

这种方式让WebHostBuilder统一管理配置源,能有效避免手动构建配置带来的冲突问题。

4. 验证配置文件完整性

如果以上方法都无效,可能是Linux下的配置文件损坏或读取权限异常:

  • 将Windows上能正常运行的host.json和appsettings.json文件复制到Linux,覆盖原有文件。
  • 检查文件权限,确保dotnet进程能读取这些文件:
    chmod 644 host.json appsettings.json
    

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:58:33