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

如何在ASP.NET 6的.pubxml中排除指定的appsettings.*.json文件?

解决方案:按发布配置排除非目标环境的appsettings文件

要实现开发时保留所有环境配置文件,发布时仅复制目标环境对应的appsettings.{EnvironmentName}.json,可以通过在发布配置文件(.pubxml)中结合MSBuild条件判断来完成,具体步骤如下:

  1. 打开目标发布配置文件
    找到项目中Properties\PublishProfiles目录下的对应发布配置文件,比如Release.Production.pubxml(将Production替换为你的目标环境名称)。

  2. 定义当前发布环境变量
    在文件的<PropertyGroup>节点内添加当前环境的标识,示例:

    <PropertyGroup>
      <!-- 替换为你的目标环境,如Staging、UAT等 -->
      <CurrentEnvironment>Production</CurrentEnvironment>
    </PropertyGroup>
    
  3. 添加条件排除规则
    在<PropertyGroup>之后添加如下<ItemGroup>,通过MSBuild的字符串判断,排除所有非当前环境的配置文件:

    <ItemGroup>
      <!-- 匹配所有appsettings.*.json,仅保留当前环境的文件 -->
      <Content Update="appsettings.*.json" Condition="!$([System.String]::Copy('%(Filename)').EndsWith('.$(CurrentEnvironment)'))">
        <CopyToPublishDirectory>Never</CopyToPublishDirectory>
      </Content>
      <!-- 可选:如果不需要将开发环境配置发布到服务器,单独排除 -->
      <Content Update="appsettings.Development.json">
        <CopyToPublishDirectory>Never</CopyToPublishDirectory>
      </Content>
    </ItemGroup>
    

为什么之前的方法无效?

直接通过Content Update指定具体环境文件名时,可能因为MSBuild的文件评估顺序问题,或者文件名占位符(如{Environment1})未被正确解析导致规则不生效。而使用动态条件判断结合当前环境变量,能更可靠地匹配并排除非目标文件。

验证效果

执行发布后,查看输出目录,应该只有appsettings.json和appsettings.$(CurrentEnvironment).json存在,其他环境的配置文件不会被复制到发布目录中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:20:09