解决 ASP.NET Core 部署到 IIS,更新项目时"文件夹正在使用"错误

前言

虽然 ASP.NET Core 应用程序是跨平台的,但我们还是经常将它部署到 Windows 的 IIS 下。

当 ASP.NET Core 站点运行时,它会锁定正在使用的程序集,如果这时向站点目录下复制文件进行更新,会提示文件被占用的错误:

c7a4b511739d29e2b7325ccb1193f9a8.png

这时,必须先关闭 IIS 站点,才能进行更新。

有什么比较简单的解决方案呢?

ZipDeploy

ZipDeploy 允许你压缩发布文件夹部署到正在运行的站点。这可以防止诸如 ERROR_FILE_IN_USE 或“被外部进程锁定”之类的错误。

下面就用一个示例程序来演示如何使用 ZipDeploy。

1. 安装ZipDeploy

创建一个 Web API 程序,然后引用Nuget包ZipDeploy

修改Startup.cs,增加如下代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddZipDeploy();
    ...
}

2.发布应用

按照正常方式,将 Web API 程序程序发布到文件夹:

6962522244057e12839947b887e6f686.png

然后,创建 IIS 站点,将发布文件夹中的文件复制到 IIS 站点部署目录下。

这时,应该可以正常访问站点。

3.更新应用

假设现在修改了代码,需要更新站点。

再次将 Web API 程序程序发布到文件夹,但是这次不是直接将文件复制到 IIS 站点部署目录下。

而是将bin\Release\net5.0\publish下的所有文件压缩成publish.zip文件,再将 zip 文件复制到 IIS 站点部署目录下。

ZipDeploy 会将 publish.zip 文件解压更新 IIS 站点,更新完成后将publish.zip改名为deployed.zip

可以看到,更新成功,并没有任何错误:

52b8080f1b450d091cede5927fec28a2.gif

结论

用了 ZipDeploy,再也不用担心 ASP.NET Core 应用程序部署到 IIS,更新项目时出现"文件夹正在使用"错误了!

想了解更多内容,请关注我的个人公众号”My IO“

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值