尝试运行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管理器上重新启动网站来解决此问题,但这确实不理想,有人知道原因吗?
答案 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上停止应用程序池,然后发布,然后再次启动该池对我来说是可行的。