dotnet publish 错误:该进程无法访问该文件,因为它正被另一个进程使用

ASi*_*uat 6 iis visual-studio-code asp.net-core-2.2

尝试运行时出现以下错误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 管理器上重新启动网站来解决这个问题,但这真的不理想,有人知道这是什么原因吗?

小智 7

为了解决它,我回收了apppool。

在本地环境中,我有一个 Post Build Event 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
Run Code Online (Sandbox Code Playgroud)

只需确保您替换YOUR APP POOL NAME为您的实际池名称(并保留双引号)

所以每次我构建解决方案时,它都会回收池并发布应用程序。因为我只是构建应用程序(就在发布之前),所以我指定--no-build了发布命令。