我正在做一個ASP.NET Core 3.1網路應用程式專案,我注意到一鍵式網路部署(為此我設定了一個檔案夾組態檔)不作業,因為我的網站檔案夾中的DLLs被另一個行程使用(可能是w3wp.exe)。我對ASP.NET Core還很陌生,但在普通的ASP.NET中,這對我來說從來不是一個問題。總之,我發現回收應用池可以暫時解決這個問題,直到1-2次發布后,這個問題再次發生。
我發現了一篇SO 帖子,其中建議在發布前讓專案的構建后事件自動回收應用池,因此我這樣實施:
ECHO ON
%SYSTEMROOT%System32inetsrvappcmd recycle apppool /apppool.name: "NeatF2P"
dotnet publish --output C:WitesNeatF2P --force --no-build
暫停
問題是,它并不總是有效。我構建后,在輸出視窗看到"NeatF2P "成功回收,但之后還是會出現同樣的錯誤。
Build started...
1>------ Build started: 專案。NeatF2PWebsite, 配置。Debug Any CPU ------
1>NeatF2PWebsite -> C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteinDebug
etcoreapp3.1NeatF2PWebsite.dll
1>NeatF2PWebsite -> C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteinDebug
etcoreapp3.1NeatF2PWebsite.Views.dll
1> "NeatF2P "成功回收了
1>Microsoft (R) Build Engine version 16.9.0 57a23d249 for .NET
1>著作權所有(C)微軟公司。保留所有權利。
1>
1>C:Program Filesdotnetsdk5.0.200SdksMicrosoft.NET.Sdk argetsMicrosoft.NET.Publish.target(238,5): warning MSB3026: Could not copy "objDebug
etcoreapp3.1NeatF2PWebsite.dll "到 "C:WitesNeatF2PNeatF2PWebsite.dll"。在1000ms內開始重試1次。該行程不能訪問檔案'C:WitesNeatF2PNeatF2PWebsite.dll',因為它正被另一個行程使用。 [C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj]。
1>C:Program Filesdotnetsdk5.0.200SdksMicrosoft.NET.Sdk argetsMicrosoft.NET.Publish.target(238,5): warning MSB3026: Could not copy "objDebug
etcoreapp3.1NeatF2PWebsite.dll "到 "C:WitesNeatF2PNeatF2PWebsite.dll"。在1000ms內開始重試2次。該行程不能訪問檔案'C:WitesNeatF2PNeatF2PWebsite.dll',因為它正被另一個行程使用。 [C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj]。
1>C:Program Filesdotnetsdk5.0.200SdksMicrosoft.NET.Sdk argetsMicrosoft.NET.Publish.target(238,5): warning MSB3026: Could not copy "objDebug
etcoreapp3.1NeatF2PWebsite.dll "到 "C:WitesNeatF2PNeatF2PWebsite.dll"。在1000ms內開始重試3次。該行程不能訪問檔案'C:WitesNeatF2PNeatF2PWebsite.dll',因為它正被另一個行程使用。 [C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj]。
1>C:Program Filesdotnetsdk5.0.200SdksMicrosoft.NET.Sdk argetsMicrosoft.NET.Publish.target(238,5): warning MSB3026: Could not copy "objDebug
etcoreapp3.1NeatF2PWebsite.dll "到 "C:WitesNeatF2PNeatF2PWebsite.dll"。在1000ms內開始重試4次。該行程不能訪問檔案'C:WitesNeatF2PNeatF2PWebsite.dll',因為它正被另一個行程使用。 [C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj]。
1>C:Program Filesdotnetsdk5.0.200SdksMicrosoft.NET.Sdk argetsMicrosoft.NET.Publish.target(238,5): warning MSB3026: Could not copy "objDebug
etcoreapp3.1NeatF2PWebsite.dll "到 "C:WitesNeatF2PNeatF2PWebsite.dll"。在1000ms內開始重試5次。該行程不能訪問檔案'C:WitesNeatF2PNeatF2PWebsite.dll',因為它正被另一個行程使用。 [C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj]。
1>C:Program Filesdotnetsdk5.0.200SdksMicrosoft.NET.Sdk argetsMicrosoft.NET.Publish.target(238,5): warning MSB3026: Could not copy "objDebug
etcoreapp3.1NeatF2PWebsite.dll "到 "C:WitesNeatF2PNeatF2PWebsite.dll"。在1000ms內開始重試6次。該行程不能訪問檔案'C:WitesNeatF2PNeatF2PWebsite.dll',因為它正被另一個行程使用。 [C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj]。
1>C:Program Filesdotnetsdk5.0.200SdksMicrosoft.NET.Sdk argetsMicrosoft.NET.Publish.target(238,5): warning MSB3026: Could not copy "objDebug
etcoreapp3.1NeatF2PWebsite.dll "到 "C:WitesNeatF2PNeatF2PWebsite.dll"。在1000ms內開始重試7次。該行程不能訪問檔案'C:WitesNeatF2PNeatF2PWebsite.dll',因為它正被另一個行程使用。 [C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj]。
1>C:Program Filesdotnetsdk5.0.200SdksMicrosoft.NET.Sdk argetsMicrosoft.NET.Publish.target(238,5): warning MSB3026: Could not copy "objDebug
etcoreapp3.1NeatF2PWebsite.dll "到 "C:WitesNeatF2PNeatF2PWebsite.dll"。在1000ms內開始重試8次。該行程不能訪問檔案'C:WitesNeatF2PNeatF2PWebsite.dll',因為它正被另一個行程使用。 [C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj]。
1>C:Program Filesdotnetsdk5.0.200SdksMicrosoft.NET.Sdk argetsMicrosoft.NET.Publish.target(238,5): warning MSB3026: Could not copy "objDebug
etcoreapp3.1NeatF2PWebsite.dll "到 "C:WitesNeatF2PNeatF2PWebsite.dll"。在1000ms內開始重試9次。該行程不能訪問檔案'C:WitesNeatF2PNeatF2PWebsite.dll',因為它正被另一個行程使用。 [C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj]。
1>C:Program Filesdotnetsdk5.0.200SdksMicrosoft.NET.Sdk argetsMicrosoft.NET.Publish.target(238,5): warning MSB3026: Could not copy "objDebug
etcoreapp3.1NeatF2PWebsite.dll "到 "C:WitesNeatF2PNeatF2PWebsite.dll"。在1000ms內開始重試10次。該行程不能訪問檔案'C:WitesNeatF2PNeatF2PWebsite.dll',因為它正被另一個行程使用。 [C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj]。
1>C:Program Filesdotnetsdk5.0.200SdksMicrosoft.NET.Sdk argetsMicrosoft.NET.Publish.target(238,5): error MSB3027: Could not copy "objDebug
etcoreapp3.1NeatF2PWebsite.dll "到 "C:WitesNeatF2PNeatF2PWebsite.dll"。超過了重試次數10次。失敗。 [C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj]。
1>C:Program Filesdotnetsdk5.0.200SdksMicrosoft.NET.Sdk argetsMicrosoft.NET.Publish.target(238,5): error MSB3021: 無法復制檔案 "objDebug
etcoreapp3.1NeatF2PWebsite.dll "到 "C:WitesNeatF2PNeatF2PWebsite.dll"。該行程不能訪問檔案 "C:WitesNeatF2PNeatF2PWebsite.dll",因為它正被另一個行程使用。[C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj] 。
1>按任意鍵繼續。. .
1>C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj(24,5): error MSB3073: The command "ECHO ON
1>C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj(24,5): 錯誤MSB3073: %SYSTEMROOT%System32inetsrvappcmd recycle apppool /apppool.name: "NeatF2P"
1>C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj(24,5): 錯誤 MSB3073: dotnet publish --output C:WitesNeatF2P --force --no-build
1>C:DevPersonalNeatF2PWebsiteNeatF2PWebsiteNeatF2PWebsite.csproj(24,5): error MSB3073: pause" exited with code 1.
1>完成構建專案 "NeatF2PWebsite.csproj" -- 失敗。
========== 構建。0次成功,1次失敗,0次最新,0次跳過 ==========
如果我等待一分鐘,然后再次嘗試構建,有時能成功,有時不能。手動回收應用程式池(在 IIS 中)有時會成功,盡管它不應該做任何命令沒有做的事情,對嗎?為什么會發生這種情況?
uj5u.com熱心網友回復:recycling就像重新啟動它,它可能會在另一個build試圖獲得檔案的句柄之前獲得,或者沒有。
uj5u.com熱心網友回復:
@L.Trabacchin的回答讓我走上了正軌。如果我修改我的構建后事件命令,在dotnet publish命令后停止和重啟應用池:
ECHO ON
%SYSTEMROOT%System32inetsrvappcmd stop apppool /apppool.name: "NeatF2P"
dotnet publish --output C:WitesNeatF2P --force --no-build
%SYSTEMROOT%System32inetsrvappcmd start apppool /apppool.name: "NeatF2P"
這還沒有失敗,我已經做了十幾次構建作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/311758.html
標籤:
