解決ASP.NET Core部署到IIS,更新項目"另一個程序正在使用此文件,進程無法訪問"


問題:部署到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(進程外托管)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM