为什么在 post-build 事件中发布时会出现 "file in use" 错误?

Why am I getting a "file in use" error when publishing in a post-build event?

编辑
Process Explorer 显示了七个 w3wp 实例,并锁定了该文件。所以我认为我们需要停止这些额外的实例。

自从将 一个 项目升级到 .NET 5(该解决方案中有 27 个项目)后,我们在 post-build 中发布时遇到此错误事件:

The process cannot access the file because it is being used by another process. [D:\somepath\MyProject.csproj]

post-build 事件如下所示:

dotnet publish --no-build -p:PublishProfile=Properties\PublishProfiles\DeployToLocalIIS.pubxml

我试过网上推荐的多种方案,包括这个:

dotnet build-server shutdown
dotnet publish --no-build -p:PublishProfile=Properties\PublishProfiles\DeployToLocalIIS.pubxml

并回收应用程序池:

%SYSTEMROOT%\System32\inetsrv\appcmd recycle apppool /apppool.name:"MyAppPool"
dotnet publish --no-build -p:PublishProfile=Properties\PublishProfiles\DeployToLocalIIS.pubxml

并停止应用程序池:

%SYSTEMROOT%\System32\inetsrv\appcmd stop apppool /apppool.name:"MyAppPool"
dotnet publish --no-build -p:PublishProfile=Properties\PublishProfiles\DeployToLocalIIS.pubxml

我什至试过将 App_Offline.htm 文件放在发布文件夹中。 链接:

https://teamcity-support.jetbrains.com/hc/en-us/community/posts/360008187440-can-t-publish-file-due-to-file-in-use-by-IIS

但是同样的错误还是发生了。还有什么我可以尝试的吗?

注意:在将其中一个项目升级到 .NET 5 之前不会发生这种情况。但现在 .NET Core 2.2 项目也会出现此问题。

VS 中的输出选项卡显示如下:

An error was encountered when processing operation 'Create File' on 'MyCompany.Common.dll'.

这些是我在上面尝试过的建议的链接:

https://github.com/dotnet/core/issues/4210
https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-build-server
https://www.thecodebuzz.com/netsdk1099-publishing-to-single-file-is-only-supported-for-executable/

停止并启动应用程序池解决了这个问题。首先,我必须重新启动以清除所有 w3wp 挂起的进程。然后我让我的 post-build 事件看起来像这样,一切都很好。

%SYSTEMROOT%\System32\inetsrv\appcmd stop apppool /apppool.name:"MyAppPool"
RD /S /Q "$(PublishDir)"
dotnet publish --no-build -p:PublishProfile=Properties\PublishProfiles\DeployToLocalIIS.pubxml
%SYSTEMROOT%\System32\inetsrv\appcmd start apppool /apppool.name:"MyAppPool"