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

.NET 7如何根据发布配置转换appsettings.json?

在ASP.NET 7发布时实现基于EnvironmentName的appsettings.json转换

ASP.NET 7默认不会在发布过程中自动把appsettings.{EnvironmentName}.json的配置合并覆盖到主appsettings.json里,得自己加配置或者脚本实现类似旧版web.config的转换效果,给你几个可行方案:

方案一:通过MSBuild任务自动合并

直接在项目的.csproj文件里添加这段配置,利用MSBuild的XmlPoke任务来覆盖配置节点:

<Target Name="TransformAppSettings" AfterTargets="Publish">
  <PropertyGroup>
    <AppSettingsPath>$(PublishDir)appsettings.json</AppSettingsPath>
    <EnvAppSettingsPath>$(ProjectDir)appsettings.$(EnvironmentName).json</EnvAppSettingsPath>
  </PropertyGroup>

  <XmlPeek XmlInputPath="$(EnvAppSettingsPath)" Query="/*">
    <Output TaskParameter="Result" ItemName="EnvSettings" />
  </XmlPeek>

  <XmlPoke XmlInputPath="$(AppSettingsPath)" Query="/*/$(EnvSettings.Identity)" Value="$(EnvSettings.InnerText)" />
</Target>

然后使用你原来的发布命令即可,EnvironmentName参数会自动传递到MSBuild任务中:

dotnet publish /p:Configuration=Release /p:EnvironmentName=Development --output c:\temp -p:SatelliteResourceLanguages=en-US -r win-x64

发布完成后,对应环境的配置会自动覆盖主appsettings.json里的节点。

方案二:用PowerShell脚本手动合并

如果不想修改项目文件,可以写个PowerShell脚本在发布后执行合并操作:

先创建Merge-AppSettings.ps1脚本:

param(
  [string]$MainConfigPath,
  [string]$EnvConfigPath
)

$mainConfig = Get-Content $MainConfigPath | ConvertFrom-Json
$envConfig = Get-Content $EnvConfigPath | ConvertFrom-Json

foreach ($prop in $envConfig.PSObject.Properties) {
  $mainConfig | Add-Member -MemberType NoteProperty -Name $prop.Name -Value $prop.Value -Force
}

$mainConfig | ConvertTo-Json -Depth 10 | Set-Content $MainConfigPath -Encoding UTF8

然后修改批处理命令,发布完成后直接运行脚本:

dotnet publish /p:Configuration=Release /p:EnvironmentName=Development --output c:\temp -p:SatelliteResourceLanguages=en-US -r win-x64
powershell -ExecutionPolicy Bypass -File .\Merge-AppSettings.ps1 -MainConfigPath "c:\temp\appsettings.json" -EnvConfigPath ".\appsettings.Development.json"
pause

方案三:用第三方XDT转换工具

使用dotnet-transform-xdt工具,它支持和旧版web.config一样的XDT转换语法:

  1. 先安装工具:
dotnet tool install -g dotnet-transform-xdt
  1. 创建转换文件(比如appsettings.Development.xdt),用XDT语法定义要修改的节点:
<appSettings xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <add key="ConnectionString" value="DevConnection" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
  <add key="LogLevel" value="Debug" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>
  1. 发布完成后执行转换命令:
dotnet publish /p:Configuration=Release /p:EnvironmentName=Development --output c:\temp -p:SatelliteResourceLanguages=en-US -r win-x64
dotnet transform-xdt --source "c:\temp\appsettings.json" --transform "appsettings.Development.xdt"
pause

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:57:42