2017-09-27 114 views
3

我嘗試通過VS2017中的發佈上下文菜單將Azure .net核心站點部署到Azure,偶爾(大約1比3部署),我得到下面的錯誤。網站DLL似乎在發佈時間歇性鎖定

Web部署任務失敗。 (Web Deploy無法修改目標文件 'MyCoreWebSite.dll',因爲它被外部進程鎖定了 。爲了允許發佈操作成功,您可能需要重新啓動應用程序以釋放鎖, 或使用.NET應用程序AppOffline規則處理你的下一個 發佈試圖瞭解更多:。 http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE

那我就從字面上等一會,再試一次,它會工作。同時,我將運行handle實用程序查找鎖定該DLL的任何內容,並且它從未發現任何內容。

這是一個錯誤還是我錯過了一些簡單的東西?

回答

5

ASP.NET核心不支持影子複製文件,這意味着ASP.NET核心進程(Kestrel)將保持對這些文件的鎖定。您可以解決此問題:

  1. 在發佈之前提供一個app_offline.htm頁面,然後將其刪除。我認爲在發佈配置文件(<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>)中有對此的自動支持。但是,如果你願意,你可以用自定義的部署腳本來完成。在ASP.NET Core 1.x中,我還需要在Startup.cs文件中添加一個文件監視任務來關閉當前進程。我不知道ASP.NET Core 2.0是否仍然需要它。
  2. 1.的缺點是您的網站在發佈期間將會脫機。如果您不希望您可以使用網站副本:將所有文件複製到子目錄(例如,\PREVIOUS),請更改web.config中的標記,使其指向新子目錄中的.exe。現在,根目錄中的所有鎖應該消失...發佈您的站點並在之後再次更改web.config。
  3. 如果您的網站是負載均衡的,您可以從課程中取出一臺服務器,更新它並在完成後將其添加回池中。
+2

4.將其部署到Azure上的「暫存」部署插槽,並在插槽上打開「自動交換插槽」選項,以便在裝載後將其與現場網站交換。 –