此時最容易造成503 service unavailable
找了幾篇文章有個功能Shadow-copying但.net6開始才有
整理了使用流程如下
1.修改專案改成.net6以上
2.修改或加入web.conifg,內容,xxxShadowCopyDirectory的部分依您路徑需求修改,xxx.dll為您會被鎖的的那個檔通常是專案名稱,若不知道可在發布後找一下
<?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="%LAUNCHER_PATH%" arguments="./xxx.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"> <handlerSettings> <handlerSetting name="experimentalEnableShadowCopy" value="true" /> <handlerSetting name="shadowCopyDirectory" value="../xxxShadowCopyDirectory/" /> </handlerSettings> </aspNetCore> </system.webServer> </location> </configuration>3.IIS上安裝Hosting Bundle,需重新啟動Server
4.發佈專案,發佈時特別注意,如會直接發佈到IIS上資料夾,刪除現有檔案要設定為false
5.只要檔案蓋過IIS上的目錄就會自動觸發,xxxShadowCopyDirectory資料夾中就會多一個版本
6.experimentalEnableShadowCopy在.net7後變成enableShadowCopy
參考資料
ASP.NET Core in .NET 6 - Shadow-copying in IIS
如何啟用 ASP.NET Core 6.0 部署到 IIS 的陰影複製 (Shadow-copying) 功能
.NET6 ShadowCopy
下载 .NET 6.0