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

时间:2019-07-16 16:58:40

标签: 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管理器上重新启动网站来解决此问题,但这确实不理想,有人知道原因吗?

2 个答案:

答案 0 :(得分:3)

要解决此问题,我回收了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来发布命令。

答案 1 :(得分:0)

我有同样的错误。在IIS上停止应用程序池,然后发布,然后再次启动该池对我来说是可行的。