未提前执行iisreset,发布Blazor Server应用到IIS本地文件夹报错
Blazor Server发布本地文件夹时MSB3021文件占用问题
问题现象
每次将Blazor Server应用发布到本地文件夹时,若未提前执行iisreset,就会触发错误提示Publish has encountered an error.。
错误详情
- tmp文件内容:
12/21/2022 12:00:24 PM System.AggregateException: 发生一个或多个错误。---> Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失败。请查看输出窗口获取详细信息。--- 内部异常堆栈跟踪结束 ---
---> (内部异常 #0) Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失败。请查看输出窗口获取详细信息。<---Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失败。请查看输出窗口获取详细信息。
===================
- 输出窗口核心错误:
Error MSB3021: 无法将文件"...\WebUI\obj\Release\net7.0\PubTmp\Out\WebUi.dll"复制到"...\WebUi.dll"。进程无法访问文件'...\WebUi.dll',因为它正被另一个进程使用。
解决方法
- 临时应急方案:发布前手动执行
iisreset命令,重启IIS释放被占用的文件。 - 精准释放进程:打开任务管理器,找到占用
WebUi.dll的w3wp.exe进程,结束对应进程后再执行发布操作。 - 配置发布选项:在项目发布配置中,进入「设置-高级」,勾选「在发布前停止站点」,让发布工具自动释放文件占用。
- 调整应用池回收策略:将目标应用池的「回收时间间隔」缩短,或开启「空闲超时回收」,降低文件长期被占用的概率。
- 添加预发布脚本:在项目属性的「生成事件-预发布事件命令行」中添加脚本,自动终止占用进程(需管理员权限):
taskkill /f /im w3wp.exe
内容的提问来源于stack exchange,提问作者buga
相关产品推荐
相关产品推荐

