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

如何为IIS托管的ASP.NET Core WebApp设置不被发布覆盖的持久配置

方案1:新增服务器专属高优先级本地配置文件(最稳妥,无冲突风险)

这是最推荐的方案,完全隔离开发/发布配置和服务器生产敏感配置:

  1. 修改程序的配置加载逻辑,在Program.cs中新增一个可选的本地生产配置文件,优先级设为最高,会覆盖所有之前加载的配置:
// .NET 6+ 顶层语句写法示例
var builder = WebApplication.CreateBuilder(args);
builder.Host.ConfigureAppConfiguration((context, config) =>
{
    // 加载服务器本地专属配置,可选不存在,修改自动重载
    config.AddJsonFile("appsettings.Production.Local.json", optional: true, reloadOnChange: true);
});

// 原有ConfigureServices的逻辑完全不需要修改
  1. 在项目.csproj文件中添加配置,禁止该文件被发布到服务器:
<ItemGroup>
  <Content Update="appsettings.Production.Local.json" CopyToPublishDirectory="Never" />
</ItemGroup>
  1. 把该文件添加到.gitignore中,避免被提交到代码仓库。
  2. 首次部署时让客户服务器管理员在站点根目录新建appsettings.Production.Local.json,填入所有敏感配置即可,后续发布永远不会覆盖该文件。

方案2:使用IIS站点级环境变量(无需改代码,零侵入)

不需要修改任何代码,直接利用IIS站点级配置和ASP.NET Core默认配置优先级实现:

  1. 打开客户服务器的IIS管理器,找到对应站点,打开「配置编辑器」
  2. 节选择system.webServer/aspNetCore,找到environmentVariables属性点击进入编辑
  3. 新增需要的配置项,例如键为ConnectionString、值为生产环境连接字符串,保存即可
    站点级环境变量仅对当前站点生效,不会和系统其他程序冲突,且WebDeploy发布不会修改IIS站点配置,永远不会被覆盖,原有配置读取代码无需任何改动。

方案3:修改发布规则排除指定配置文件(兼容现有逻辑,改动最小)

如果你不想调整代码,想继续用现有的配置文件(比如appsettings.Production.json、自定义secrets.json),只需要在发布配置中排除这些文件即可:

  1. 打开你WebDeploy对应的发布配置文件(后缀为.pubxml)
  2. 在PropertyGroup节点下添加排除规则:
<ExcludeFilesFromDeployment>appsettings.Production.json;secrets.json</ExcludeFilesFromDeployment>

配置后发布时不会覆盖服务器上已经存在的对应文件,只需首次部署时让管理员填好敏感配置即可。

注:你之前自定义secrets.json无法读取是因为默认配置加载逻辑没有包含该文件,只需在配置加载代码中添加config.AddJsonFile("secrets.json", optional: true, reloadOnChange: true)即可正常读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:24:03