問題:部署到IIS上的ASP.NET Core項目,在更新的時候會進程占用的錯誤
初步解決方案:
1,關閉應用程序池
2,關閉網站
3,更新項目
缺點:網站沒法訪問,部署項目停的時間過長
查詢官方文檔后,官方給出的方案:
結合官方文檔,找到了一個目前看算是比較好的解決方案(一定要看底部的特別注意)
好點的解決方案(一次配置后,1秒鍾更新):
1,在D盤根目錄創建一個app_offline.htm文件,注意是.htm文件,不是.html
2,創建一個待發布文件夾,把需要更新的項目文件放到該目錄下
3,創建一個bat執行文件,內容如下,通過bat文件完成更新
@echo off call xcopy D:\app_offline.html D:\運行的項目 call xcopy D:\待發布項目 D:\運行的項目 /s /e /Q /Y /I del D:\運行的項目\app_offline.htm
注釋:
1,復制D盤根目錄的app_offline.htm文件到項目運行的目錄,接管所有的請求
2,復制待發布的文件到項目運行的目錄完成覆蓋更新
3,刪除app_offline.htm文件恢復項目正常運行
特別注意:
部署到 IIS 的 ASP.NET Core 應用程序可以選擇兩種不同的托管模式,分別是“進程內托管” 和 “進程外托管”,選擇不同的托管模式可通過修改配置文件 web.config 來完成配置選擇
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\Property.Api.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess" /> </system.webServer> </location> </configuration>
需要修改 aspNetCore的hostingModel
InProcess(進程內托管)
OutOfProcess(進程外托管)
好點的解決方案需要把項目修改為OutOfProcess(進程外托管)