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

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

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

解决 ASP.NET Core 部署到 IIS,更新项目时

这时,必须先关闭 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 程序程序发布到文件夹:

解决 ASP.NET Core 部署到 IIS,更新项目时

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

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

3.更新应用

 

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

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

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

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

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

解决 ASP.NET Core 部署到 IIS,更新项目时

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

 

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...