如何配置IIS 10在Visual Studio 2017远程部署时自动备份网站?
实现MSDeploy部署时自动创建IIS站点备份
我来帮你搞定这个自动备份的问题——之前我也踩过类似的坑,其实MSDeploy本身就自带了站点备份的能力,不用折腾复杂的自定义脚本。结合VS2017的发布配置,就能轻松实现每次部署前自动备份。下面分步骤给你讲清楚:
1. 直接在VS2017发布配置里启用备份
这是最简单的方法,不需要手动写命令行:
- 打开你的网站项目,右键选择「发布」,打开发布配置界面
- 选中你正在使用的远程发布配置,点击「编辑」按钮
- 切换到「设置」选项卡,滚动到页面最下方,找到「其他MSDeploy命令行参数」输入框
- 填入参数:
-enableRule:BackupRule - (可选)如果想指定备份存储路径,点击「添加参数」:
- 参数名称填
BackupPath,值填你想要的文件夹(比如D:\IIS_Backups\MyWebSite),类型选「文本」
- 参数名称填
- 保存配置,下次发布时,MSDeploy会自动在部署前备份你的站点到指定路径
默认情况下,备份会存在IIS的默认备份目录(C:\Windows\System32\inetsrv\backup),但自定义路径更方便管理。
2. 命令行脚本的正确写法(如果偏好手动执行)
如果你之前写的脚本没生效,大概率是参数不对。这里给你一个完整的MSDeploy命令示例,替换成你的实际路径和服务器信息即可:
msdeploy.exe -verb:sync ^ -source:contentPath="C:\YourProject\bin\Release\PublishOutput" ^ -dest:contentPath="YourRemoteSiteName",computerName="http://remote-server-ip:8172/msdeploy.axd",username="RemoteAdminUser",password="YourPassword",authType="Basic" ^ -enableRule:BackupRule ^ -setParam:name="BackupPath",value="D:\IISBackups\YourSite"
注意几个关键点:
- 远程服务器要开启
Web Management Service(WMSVC),防火墙开放8172端口 - 部署用户需要有IIS管理器权限和备份目录的读写权限
- 确保本地和远程的MSDeploy版本兼容(VS2017默认用MSDeploy 3.6,远程服务器也要装对应版本)
3. 可选:自动清理旧备份(避免磁盘占满)
如果想自动删除过期备份,写个简单的PowerShell脚本,配合Windows任务计划定期执行:
# Clean-OldIISBackups.ps1 $backupRoot = "D:\IISBackups\YourSite" $keepDays = 7 # 保留最近7天的备份 Get-ChildItem -Path $backupRoot -Directory | Where-Object { $_.CreationTime -lt (Get-Date).AddDays(-$keepDays) } | Remove-Item -Force -Recurse
然后创建Windows任务计划,设置每天执行这个脚本即可。
排查之前失败的常见原因
如果之前的尝试没成功,先检查这几点:
- MSDeploy版本不兼容:远程服务器的MSDeploy版本要和VS2017使用的一致(3.6版本)
- 权限不足:部署用户没有IIS管理权限或备份目录的读写权限
- 参数错误:没正确添加
-enableRule:BackupRule,或者路径拼写错误 - 远程服务未开启:WMSVC服务没启动,或者8172端口被防火墙拦截
内容的提问来源于stack exchange,提问作者Misha Sloushch
相关产品推荐
相关产品推荐

