You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows升级后发布ASP.NET Core项目提示w3wp.exe锁定文件如何解决

IIS部署ASP.NET Core升级系统后发布文件被w3wp.exe锁定解决方案

根因说明

该问题由Windows 10 21H2版本的IIS默认策略变更触发:系统升级后应用程序池默认开启重叠回收、AlwaysRunning启动模式,旧w3wp进程未完全释放文件锁时新进程已启动,双重占用站点目录下的DLL文件,导致发布时重试10次后仍然失败。

永久解决方案

方案1:禁用应用程序池重叠回收(优先级最高,适配所有场景)

  • 打开IIS管理器,定位到对应站点所属的应用程序池,右键选择「高级设置」
  • 在「进程模型」分类下找到禁用重叠回收选项,设置为True
  • 在「回收」分类下勾选所有生成回收事件日志的选项,方便后续排查回收异常
  • 保存配置后重启对应应用程序池即可

方案2:开启ASP.NET Core影子复制功能(无需修改IIS配置,适配所有部署场景)

ASP.NET Core 3.0及以上版本支持影子复制机制,运行时会将程序集加载到临时目录,不会锁定站点根目录的原始文件:

  • 打开项目根目录的web.config文件,在aspNetCore节点下添加影子复制配置,示例如下:
<aspNetCore processPath="dotnet" arguments=".\你的项目.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
  <handlerSettings>
    <handlerSetting name="shadowCopyEnabled" value="true" />
    <handlerSetting name="shadowCopyTempDirectory" value="%TEMP%\你的项目标识\ShadowCopy" />
  </handlerSettings>
</aspNetCore>
  • 保存配置后重新发布项目即可生效

方案3:配置发布流程自动启停应用程序池(适配本地调试发布场景)

可以在Visual Studio的发布配置中加入自动执行的命令,发布前停止应用程序池,发布完成后自动重启,从根本上避免进程占用:

  • 打开项目对应的发布配置文件(后缀为.pubxml),在Project节点内添加如下配置:
<Target Name="StopIISAppPool" BeforeTargets="BeforePublish">
  <Exec Command="%windir%\system32\inetsrv\appcmd stop apppool /apppool.name:你的应用程序池名称" />
</Target>
<Target Name="StartIISAppPool" AfterTargets="AfterPublish">
  <Exec Command="%windir%\system32\inetsrv\appcmd start apppool /apppool.name:你的应用程序池名称" />
</Target>
  • 注意需要以管理员身份运行Visual Studio,才能正常执行IIS管理命令

方案4:关闭应用程序预热功能

21H2默认开启的应用预热功能会在站点重启后自动启动w3wp进程,可能提前占用文件:

  • 打开对应应用程序池的高级设置,将「启动模式」设置为OnDemand
  • 选中对应站点,打开「配置编辑器」,定位到system.webServer/applicationInitialization节点,将doAppInitAfterRestart设置为False

验证方式

修改配置后重启IIS服务,连续执行3次全量发布操作,无文件占用报错、w3wp进程无重复启动现象即为配置生效。

内容的提问来源于stack exchange,提问作者user222137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:00:00