避免因為檔案鎖定問題造成發佈失敗,同時發佈期間也允許繼續操作

使用 Shadow Copy (適用於 .NET 6+)

編輯發佈設定檔 .pubxml 加入以下設定
<EnableMSDeployAppOffline>false</EnableMSDeployAppOffline>
<MSDeploy_RenameLockedFiles>true</MSDeploy_RenameLockedFiles>

編輯 iis web.config 改為以下設定
<aspNetCore processPath="dotnet" arguments=".\xxx.dll" stdoutLogEnabled="false" hostingModel="inprocess">
<handlerSettings>
  <handlerSetting name="enableShadowCopy" value="true" />
  <handlerSetting name="shadowCopyDirectory" value="../xxx_ShadowCopyFiles/" />
</handlerSettings>
</aspNetCore>
然後將此檔案複製一份到專案根目錄,確保未來發佈新版時設定不會跑掉(不使用自動生成機制)

於 iis 專案發佈路徑同一層新增資料夾 xxx_ShadowCopyFiles ,允許發佈時有權限把檔案複製一份到此資料夾,步驟如下:
對該資料夾按右鍵 -> 內容 -> 安全性
新增您的 AppPool 帳號(通常寫為 IIS AppPool\xxx,xxx 為您的 AppPool 名稱)
輸入完後,點擊右側的 「檢查名稱 (Check Names)」。如果帳號正確,它會自動變成有底線的格式(例如 <u>LIP</u>),這代表 Windows 已經成功辨識這個虛擬帳號。
如果點擊「檢查名稱」後出現錯誤,請確認以下設定:
點擊視窗中的 「位置 (Locations...)」 按鈕。
確保選取的是您的 「本機電腦名稱」(位於清單最頂端),而不是網域 (Domain)。
賦予 修改 (Modify) 的權限
重啟AppPool,確保以上設定生效

發佈新版後檢查 xxx_ShadowCopyFiles 裡面若有產生檔案則表示設定成功

留言

熱門文章