<strike id="5ntnv"><i id="5ntnv"><del id="5ntnv"></del></i></strike>
<strike id="5ntnv"></strike><ruby id="5ntnv"></ruby><del id="5ntnv"><dl id="5ntnv"><del id="5ntnv"></del></dl></del><strike id="5ntnv"><dl id="5ntnv"><del id="5ntnv"></del></dl></strike>
<strike id="5ntnv"></strike>
<strike id="5ntnv"></strike>
<span id="5ntnv"><dl id="5ntnv"></dl></span>
<strike id="5ntnv"><i id="5ntnv"><del id="5ntnv"></del></i></strike><th id="5ntnv"><noframes id="5ntnv"><span id="5ntnv"><dl id="5ntnv"><del id="5ntnv"></del></dl></span>
<span id="5ntnv"></span>
<strike id="5ntnv"><dl id="5ntnv"><del id="5ntnv"></del></dl></strike>
<strike id="5ntnv"><dl id="5ntnv"><del id="5ntnv"></del></dl></strike><strike id="5ntnv"><i id="5ntnv"></i></strike><span id="5ntnv"></span>
<strike id="5ntnv"></strike>
<strike id="5ntnv"></strike>
<th id="5ntnv"><noframes id="5ntnv">
<ruby id="5ntnv"></ruby>
<strike id="5ntnv"><dl id="5ntnv"></dl></strike>

貴州網站建設公司貴州網站建設公司

Core在IIS的熱發布問題或者報錯文件已在另一個程序中打開

Core在IIS的的打開熱發布問題或者報錯文件已在另一個程序中打開

閱讀次數:224 次  來源:admin  發布時間:

關于Core發布到IIS的熱發布問題,或者覆蓋dll文件的布問時候會報錯"文件已在另一個程序中打開",也就是題或無法覆蓋程序的問題,經過百度和分析總結以下幾種方案:

一、錯文使用app_offline.htm文件,個程這個方案網上最多:1.具體步驟:

1)在發布路徑新建一個文件夾"UpdateFiles"

2)文件夾"UpdateFiles"里面放一個app_offline.htm文件,序中這個文件是的打開網站處于離線狀態的時候的返回給客戶端的頁面內容

3)文件夾"UpdateFiles"里面放一個"PublishFiles"文件夾,這個文件夾里面放需要發布的布問文件

4)在發布路徑下面新建一個"pubish.bat"文件,里面輸入如下內容:其實就是題或先復制app_offline.htm文件到發布路徑,讓網站處于離線狀態,錯文然后覆蓋發布的個程文件,再刪除pp_offline.htm文件,序中讓網站恢復在線狀態

@echo off

call xcopy %~dp0UpdateFiles\app_offline.htm %~dp0

call xcopy %~dp0UpdateFiles\PublishFiles %~dp0 /s /e /Y

del %~dp0app_offline.htm

ause

2.利弊分析:好處:

1.實現簡單

2.不用開發

弊端:

1.復制app_offline.htm文件到發布路徑之后,的打開網站不能立即結束,布問需要等最后的題或請求結束,才能復制,不然以上腳本復制的時候會失敗

2.復制app_offline.htm文件到發布路徑之后,時沒有結束的請求返回的結果會最終會是空白內容,也即會是失敗,這樣會造成客戶端發布的時候偶發性的失敗問題

3.覆蓋文件期間,網站處于離線狀態,無法正常訪問

二、改文件名字,然后復制發布程序,然后退出網:

來源:https://bbs.csdn.net/topics/395986630

1.具體步驟:

如下代碼,在一個控制器創建一個如下的方法,然后需要更新的時候Post這個方法就行。以下代碼沒有具體測試過,只測試過可以修改文件名字和application.StopApplication();會退出網站,所以應該是可行的。

[HttpPost]        public IActionResult Update([FromServices]IHostApplicationLifetime application)        {             //獲取程序的工作目錄路徑,依賴注入 IWebHostEnvironment            var web = WebHost.ContentRootPath;             //// 改名方法-假設項目的dll 為 WebApplication1.dll            FileInfo fi = new FileInfo(Path.Combine(web, "WebApplication1.dll"));            //// 改為 a1234            fi.MoveTo(Path.Combine(web, "a1234.dll"));             //要復制的新文件路徑-你的新dll 路徑 可以是下載或者復制或移動            string pLocalFilePath = Path.Combine(WebHost.WebRootPath, "css", "WebApplication1.dll");             //將新文件復制過去基目錄            string pSaveFilePath = Path.Combine(web, "WebApplication1.dll");            if (System.IO.File.Exists(pLocalFilePath))            {                 System.IO.File.Copy(pLocalFilePath, pSaveFilePath, true);                 //復制成功后, 殺死當前的進程=相當于重啟了  依賴注入 IHostApplicationLifetime                application.StopApplication();            }             return Content("ok");        }

2.利弊分析:好處:

1.基本可以實現IIS的熱發布

弊端:

1.application.StopApplication();之后,當時沒有結束的請求返回的結果會最終會是空白內容,也即會是失敗,這樣會造成客戶端發布的時候偶發性的失敗問題

2.現稍微復雜,需用開發

三、使用使用網關(例如ocelot)或負載均衡(nginx)軟件實現(推薦):1.具體實現:

這個還沒有來得及具體驗證,不過理論上是比較完美的解決方案,但實現起來有點復雜,其實就是利用網關(例如ocelot)或負載均衡(nginx)軟件的高可用功能來實現,可以IIS中部署2個相同的網站服務,然后發布的時候一個個發布更新網站,更新服務的時候"優雅"的停止(nginx好像直接命令就可以實現),這樣就可以在不影響客戶端的情況下更新網站了。當然也可以用多服務器來實現高可用。

2.利弊分析:好處:

1.比較完美的實現熱發布,實現高可用

弊端:

1.需要搭建Consul,部署2個或多個網站

本來剛接觸Core,希望有經驗的大佬推薦更加完善的解決方案。

贊(16414)
未經允許不得轉載:>貴州網站建設公司 » Core在IIS的熱發布問題或者報錯文件已在另一個程序中打開
国产欧美精品