iis釋出DLL,程序無法訪問該檔案,因為它正在被其他程序使用
阿新 • • 發佈:2022-04-21
(.net6)iis釋出DLL,程序無法訪問該檔案,因為它正在被其他程序使用
問題
雖然最近使用了.net6
,但是公司伺服器仍然是windows,於是還是跟往常一樣部署在iis.
但是再使用過程中發現iis
釋出站點後,無法像以前.net framework
那樣可以直接替換DLL檔案來發布。會提示程序無法訪問該檔案,因為它正在被其他程序使用。
經過上海.net群裡大石頭的指導,發現可以修改webconfig檔案來解決這個問
解決思路
在.NET 6 Preview 3
的更新改動中有這樣一段描述
IIS 中的淺拷貝支援
我們在 IIS 的 ASP.NET Core
模組中添加了一個新功能,以增加對淺拷貝應用程式程式集的支援。目前,.NET 在 Windows 上執行時鎖定了應用程式的二進位制檔案,使得在應用程式仍在執行時無法替換二進位制檔案。雖然我們的建議仍然是使用應用程式離線檔案,但我們認識到在某些情況下(例如 FTP 部署)不可能這樣做。
在這種情況下,你可以通過自定義 ASP.NET Core
模組處理程式設定來啟用淺拷貝。在大多數情況下,ASP.NET Core
應用程式的web.config不在原始碼版本控制中,你可以修改它(它們通常是由 SDK 生成的)。你可以新增這個web.config示例來開始。
<?xml version="1.0" encoding="utf-8"?> <configuration> <!-- To customize the asp.net core module uncomment and edit the following section. For more info see https://go.microsoft.com/fwlink/?linkid=838655 --> <system.webServer> <handlers> <remove name="aspNetCore"/> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModulev2" resourceType="Unspecified"/> </handlers> <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"> <handlerSettings> <handlerSetting name="experimentalEnableShadowCopy" value="true" /> <handlerSetting name="shadowCopyDirectory" value="../ShadowCopyDirectory/" /> <!-- Only enable handler logging if you encounter issues--> <!--<handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log" />--> <!--<handlerSetting name="debugLevel" value="FILE,TRACE" />--> </handlerSettings> </aspNetCore> </system.webServer> </configuration>
解決方法
先下載Hosting Bundle
,iis
部署所需要的擴充套件包,具體看下圖。
連結地址 https://dotnet.microsoft.com/en-us/download/dotnet/6.0
修改iis生成的配置檔案
新增紅框內修改的地方即可。實際測試下來只有Runtime 6.0.3
以上版本才有效
重啟IIS或者重啟伺服器
現在已經可以覆蓋DLL,也可以使用FTP的方式來發布檔案了