雖然 ASP.NET Core 應用程序是跨平台的,但我們還是經常将它部署到 Windows 的 IIS 下。
當 ASP.NET Core 站點運行時,它會鎖定正在使用的程序集,如果這時向站點目錄下複制文件進行更新,會提示文件被占用的錯誤:
這時,必須先關閉 IIS 站點,才能進行更新。
有什麼比較簡單的解決方案呢?
ZipDeployZipDeploy 允許你壓縮發布文件夾部署到正在運行的站點。這可以防止諸如 ERROR_FILE_IN_USE 或“被外部進程鎖定”之類的錯誤。
下面就用一個示例程序來演示如何使用 ZipDeploy。
1. 安裝ZipDeploy創建一個 Web API 程序,然後引用Nuget包ZipDeploy。
修改Startup.cs,增加如下代碼:
publicvoidConfigureServices(IServiceCollectionservices)
{
services.AddZipDeploy();
...
}
按照正常方式,将 Web API 程序程序發布到文件夾:
然後,創建 IIS 站點,将發布文件夾中的文件複制到 IIS 站點部署目錄下。
這時,應該可以正常訪問站點。
3.更新應用假設現在修改了代碼,需要更新站點。
再次将 Web API 程序程序發布到文件夾,但是這次不是直接将文件複制到 IIS 站點部署目錄下。
而是将bin\Release\net5.0\publish下的所有文件壓縮成publish.zip文件,再将 zip 文件複制到 IIS 站點部署目錄下。
ZipDeploy 會将 publish.zip 文件解壓更新 IIS 站點,更新完成後将publish.zip改名為deployed.zip。
可以看到,更新成功,并沒有任何錯誤:
結論
用了 ZipDeploy,再也不用擔心 ASP.NET Core 應用程序部署到 IIS,更新項目時出現"文件夾正在使用"錯誤了!
,