dotnet publish 错误:该进程无法访问该文件,因为它正被另一个进程使用
Posted
技术标签:
【中文标题】dotnet publish 错误:该进程无法访问该文件,因为它正被另一个进程使用【英文标题】:dotnet publish Error: The process cannot access the file because it is being used by another process 【发布时间】:2019-11-25 11:32:26 【问题描述】:尝试运行dotnet publish
时出现以下错误:
进程无法访问该文件,因为它正被另一个进程使用 过程。
当您尝试发布您的应用并且您一直在浏览器中查看已发布的版本时,似乎会发生这种情况,由于某种原因它会锁定文件。
完整的错误信息:
C:\Program Files\dotnet\sdk\2.2.301\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(169,5):警告 MSB3026:无法复制“obj\Debug \netcoreapp2.2\TemplateWebApp.dll”到“bin\Debug\netcoreapp2.2\publish\TemplateWebApp.dll”。在 1000 毫秒内开始重试 1。该进程无法访问文件 '\cpft-bi-web01\d$\Websites\TemplateWebApp\bin\Debug\netcoreapp2.2\publish\TemplateWebApp.dll',因为它正被另一个进程使用。 [\cpft-bi-web01\d$\Websites\TemplateWebApp\TemplateWebApp.csproj]
我可以通过关闭浏览器并在 IIS 管理器上重新启动网站来解决此问题,但这确实不太理想,有人知道这是什么原因吗?
【问题讨论】:
您发布到的目标是否与您的 IIS 网站的发布文件夹相同? ...如果是这样,那么请看这里(并检查其有关“网络部署”的 cmets):***.com/questions/15276978/… 还有这个,可能是重复的:***.com/questions/41829158/net-core-locking-files @LGSon 是的,我发布到的目标和 IIS 指向的文件夹是相同的,谢谢,我会研究 web 部署。 【参考方案1】:为了解决这个问题,我回收了apppool。
在本地环境中,我有一个构建后事件Project -> Properties -> Build Events -> Post-build event command line
,它运行位于项目目录中的.bat
文件。
这是来自bat文件的代码:
%SYSTEMROOT%\System32\inetsrv\appcmd recycle apppool /apppool.name:"YOUR APP POOL NAME"
dotnet publish --force --no-build
pause
只需确保将 YOUR APP POOL NAME
替换为您的实际池名称(并保留双引号)
所以每次我构建解决方案时,它都会回收池并发布应用程序。因为我只是构建应用程序(在发布之前),我指定--no-build
来发布命令。
【讨论】:
这个解决方案对我不起作用。输出窗口显示“MyAppPool 已成功回收”,但我仍然收到有关正在使用的 DLL 的错误。手动回收应用程序池可以修复它,但这不是每次发布都必须回收它的解决方案!【参考方案2】:我有同样的错误。停止 IIS 上的应用程序池,然后发布,然后再次启动池对我有用。
【讨论】:
这个答案让我找到了我的解决方案。我的不会发布的网站甚至没有在 IIS 中设置,但停止 www 服务使发布能够顺利完成。以上是关于dotnet publish 错误:该进程无法访问该文件,因为它正被另一个进程使用的主要内容,如果未能解决你的问题,请参考以下文章
dotnet publish 不使用 appsettings.json
如何将 blazor 客户端/服务器应用程序发布到 linux Web 服务器?无权访问 ssh 并且 dotnet publish 不提供 index.html