使用WebDeploy部署ASP.NET至IIS,如何避免覆盖已存在的appsettings.Production.json?
解决Web Deploy发布时不覆盖已存在的appsettings.Production.json文件
方法一:修改项目文件配置,禁止自动推送该文件
直接在项目的.csproj文件中设置,让Web Deploy永远不推送appsettings.Production.json:
- 打开项目根目录下的
.csproj文件,找到对应appsettings.Production.json的配置节点,修改为:<ItemGroup> <Content Include="appsettings.Production.json"> <CopyToPublishDirectory>Never</CopyToPublishDirectory> </Content> </ItemGroup> - 首次发布时,手动将该文件上传到服务器站点目录,或者临时把
CopyToPublishDirectory改为Always,发布完成后改回Never。 - 后续发布时,Web Deploy会完全跳过这个文件,无论项目里的文件是否更新,都不会覆盖服务器上管理员编辑后的版本。
方法二:在Web Deploy发布配置中添加跳过规则
通过Visual Studio的发布配置直接排除该文件:
- 打开Visual Studio的发布窗口,切换到「设置」选项卡。
- 找到「文件发布选项」区域,点击「添加规则」。
- 选择「特定文件」,输入
appsettings.Production.json并保存配置。 - 此后每次发布,Web Deploy都会忽略这个文件,彻底避免覆盖。
方法三:使用外部配置文件(进阶安全方案)
将生产环境的自定义配置移到站点外部的独立文件,彻底隔离代码库和生产配置:
- 在服务器上创建一个站点外的配置文件(比如
D:\Configs\appsettings.Production.override.json),让管理员编辑这个文件。 - 在项目的
Program.cs中添加加载外部配置的逻辑:var builder = WebApplication.CreateBuilder(args); // 加载默认配置后,追加外部override文件 builder.Configuration.AddJsonFile( @"D:\Configs\appsettings.Production.override.json", optional: true, reloadOnChange: true); - 项目里的
appsettings.Production.json仅作为默认模板,发布时无需担心覆盖问题,同时生产配置也不会被提交到代码仓库,安全性更高。
内容的提问来源于stack exchange,提问作者Luke Vo
相关产品推荐
相关产品推荐

