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

.NET 8升级后发布ASP.NET Core Web API到IIS遇DLL占用问题

.NET 8 Web API 发布到 IIS 时 DLL 被 w3wp.exe 占用的解决方案
  • 优化应用程序池闲置与回收策略
    打开IIS管理器找到对应应用程序池,右键进入「高级设置」:

    1. 在「进程模型」下设置「闲置超时(分钟)」为1-5分钟(根据业务调整),闲置超时后IIS会自动回收进程释放DLL占用;
    2. 开启「快速失败保护」,配置合理的「失败间隔」和「最大失败次数」,确保异常场景下自动回收进程。
  • 发布前自动回收应用程序池
    在发布流程中加入回收命令,确保发布前进程已释放:
    用PowerShell命令直接回收目标池:

    Restart-WebAppPool -Name "你的应用程序池名称"
    

    如果用Visual Studio发布,可在发布配置的「预发布脚本」中添加上述命令,实现发布前自动清理进程。

  • 启用.NET Core影子复制功能
    在项目的web.config中添加配置,让IIS加载DLL副本而非原文件,这样原文件可随时替换:

    <aspNetCore processPath="dotnet" arguments=".\你的项目名称.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
      <handlerSettings>
        <handlerSetting name="enableShadowCopy" value="true" />
        <handlerSetting name="shadowCopyDirectory" value=".\shadowCopy" />
      </handlerSettings>
    </aspNetCore>
    

    注意:确保shadowCopyDirectory目录存在,或让应用池拥有创建目录的权限。

  • 排查第三方组件或自定义代码的锁定问题
    用Process Explorer工具查看w3wp.exe具体锁定的文件,定位是否有第三方日志组件、文件监控工具或自定义文件读写逻辑长期占用DLL。找到问题后调整代码,比如确保文件流及时释放、日志组件改用非锁定模式。

  • 配置应用程序池定期回收
    在应用程序池高级设置的「回收」选项中:

    1. 设置「固定时间间隔(分钟)」,比如每天凌晨回收一次;
    2. 勾选「回收工作进程(请求数目)」,设置合理请求数,达到阈值后自动回收进程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:40:59