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

同一Windows服务器上的.NET应用如何按环境配置不同appSettings.json

问题背景

同一Windows服务器下部署UAT与生产环境(分属不同文件夹),现有appSettings.json和appsettings.development.json两类配置文件,需求为:

  • UAT环境使用appsettings.development.json
  • 生产环境使用appSettings.json
    当前采用Github Workflows实现CI/CD(有dev.yml和prod.yml两个工作流),应用通过IIS发布运行,无法在服务器上直接添加环境变量,且Startup.cs已配置默认的配置加载逻辑:
public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();

    Configuration = builder.Build();
}
解决方案

以下三种方法均可实现需求,可根据实际场景选择:

方法1:发布时指定环境参数自动生成配置

利用dotnet publish的--environment参数,在发布UAT时指定环境为Development,发布后的web.config会自动添加ASPNETCORE_ENVIRONMENT环境变量,让应用加载对应的环境配置文件。

  1. 修改dev.yml中的发布命令,添加--environment Development参数:
    - name: Release Dotnet application
      run: |
       stop-webapppool DevAPI
       stop-iissite -Name DevAPI -Confirm: $false
       dotnet publish DevAPI.App.Api -c Release --environment Development --output C:\backend\dev
    
  2. 生产环境的prod.yml中,发布命令无需添加该参数(或显式指定--environment Production),保持默认即可,此时应用会以Production环境启动,仅加载appsettings.json。

方法2:手动修改web.config添加环境变量

如果不想修改发布命令,可在UAT发布完成后,通过脚本修改web.config添加环境变量配置:

  1. 在dev.yml的Release Dotnet application步骤末尾,添加PowerShell脚本修改web.config:
    - name: Release Dotnet application
      run: |
       stop-webapppool DevAPI
       stop-iissite -Name DevAPI -Confirm: $false
       dotnet publish DevAPI.App.Api -c Release --output C:\backend\dev
       # 添加环境变量到web.config
       $xml = [xml](Get-Content C:\backend\dev\web.config)
       $envVarsNode = $xml.CreateElement("environmentVariables")
       $envVarNode = $xml.CreateElement("environmentVariable")
       $envVarNode.SetAttribute("name", "ASPNETCORE_ENVIRONMENT")
       $envVarNode.SetAttribute("value", "Development")
       $envVarsNode.AppendChild($envVarNode)
       $xml.configuration.location.system.webServer.aspNetCore.AppendChild($envVarsNode)
       $xml.Save("C:\backend\dev\web.config")
    
  2. 生产环境的web.config保持默认,不添加该环境变量配置即可。

方法3:发布后重命名配置文件(直接替换)

如果不需要保留基础配置与环境配置的合并逻辑,可直接在UAT发布后将appsettings.development.json重命名为appsettings.json,覆盖原文件:
在dev.yml的Release Dotnet application步骤末尾添加:

- name: Release Dotnet application
  run: |
   stop-webapppool DevAPI
   stop-iissite -Name DevAPI -Confirm: $false
   dotnet publish DevAPI.App.Api -c Release --output C:\backend\dev
   # 替换配置文件
   Copy-Item C:\backend\dev\appsettings.development.json C:\backend\dev\appsettings.json -Force

此方法简单直接,但会丢失appsettings.json中的基础配置,仅适合环境配置完全独立的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:18:12