如何解决为什么在构建后事件中发布时会出现“文件正在使用”错误?
编辑
Process Explorer 显示了 w3wp 的七个实例,并锁定了该文件。所以我认为我们需要停止这些额外的实例。
自从将一个项目升级到 .NET 5(解决方案中有 27 个项目)后,我们在构建后事件中发布时收到此错误:
进程无法访问该文件,因为它正被另一个进程使用 过程。 [D:\somepath\MyProject.csproj]
构建后事件如下所示:
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://stackoverflow.com/a/51993805/279516
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 中的输出选项卡显示:
处理“创建文件”操作时遇到错误 'MyCompany.Common.dll'。
这些是我在上面尝试过的建议的链接:
https://stackoverflow.com/a/59945099/279516
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 挂起的进程。然后我让我的构建后事件看起来像这样,一切都很好。
%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"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。