.NET Core中如何基于发布配置文件设置appsettings值?
.NET 6.0 基于Pubxml实现Appsettings.json发布时动态修改配置
一、mordor-prod.pubxml配置(发布对应配置文件)
直接打开项目里的Properties/PublishProfiles/mordor-prod.pubxml,添加以下内容,确保发布时包含主配置文件和prod环境的客户端配置文件:
<ItemGroup> <Content Include="appsettings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToPublishDirectory>Always</CopyToPublishDirectory> </Content> <Content Include="appsettings.Mordor.PROD.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToPublishDirectory>Always</CopyToPublishDirectory> </Content> </ItemGroup>
二、mordor-stage.pubxml配置(修改Client_Version节点)
1. 创建XDT转换文件
在项目根目录新建appsettings.stage.xdt文件,内容写死要替换的Client_Version节点:
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <Client_Version xdt:Transform="Replace"> <Name_of_client>Mordor</Name_of_client> <Environment_of_client>STAGE</Environment_of_client> </Client_Version> </configuration>
注意:这个XDT文件用XML结构对应原JSON的层级,
xdt:Transform="Replace"表示直接替换整个Client_Version节点。
2. 配置pubxml执行转换
打开Properties/PublishProfiles/mordor-stage.pubxml,添加转换任务和文件发布规则:
<Target Name="TransformAppSettings" AfterTargets="CopyAllFilesToSingleFolderForPublish"> <TransformXml Source="appsettings.json" Transform="appsettings.stage.xdt" Destination="$(PublishDir)appsettings.json" /> </Target> <ItemGroup> <!-- 确保主配置和stage环境的客户端配置被发布 --> <Content Include="appsettings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToPublishDirectory>Always</CopyToPublishDirectory> </Content> <Content Include="appsettings.Mordor.STAGE.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToPublishDirectory>Always</CopyToPublishDirectory> </Content> <!-- 不让XDT转换文件被发布到目标服务器 --> <Content Include="appsettings.stage.xdt"> <CopyToPublishDirectory>Never</CopyToPublishDirectory> </Content> </ItemGroup>
三、验证发布效果
- 选择
mordor-prod配置发布,查看发布目录:appsettings.json保持原配置,同时包含appsettings.Mordor.PROD.json。 - 选择
mordor-stage配置发布,查看发布目录:appsettings.json里的Client_Version节点已替换为STAGE环境配置,同时包含appsettings.Mordor.STAGE.json。
内容的提问来源于stack exchange,提问作者NeshaSerbia
相关产品推荐
相关产品推荐

