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

IIS托管ASP.NET Core应用中HtmlAgilityPack DLL突发加载失败排查

解决IIS托管ASP.NET Core 8.0中HtmlAgilityPack随机加载失败问题

针对你遇到的HtmlAgilityPack DLL随机加载失败问题,结合给出的环境配置,可从以下几个方向排查和解决:

1. 影子复制(Shadow Copy)的冲突问题

启用Shadow Copy时,IIS会将程序集复制到临时目录加载,若临时目录的副本因回收、权限或清理操作损坏/丢失,就会出现原DLL存在但加载失败的情况。

  • 解决方案:
    • 直接禁用Shadow Copy:在web.config的<aspNetCore>节点中添加配置:
      <aspNetCore ... shadowCopyBinAssemblies="false" />
      
    • 若需保留Shadow Copy,指定独立的临时目录并配置权限:
      <aspNetCore ... shadowCopyDirectory="D:\CustomShadowCopy\MyApp" />
      
      确保应用池身份对该目录有完整读写权限,同时排除该目录的系统自动清理规则。

2. 应用自动回收的优化

每日自动回收可能导致程序集加载上下文异常,尤其结合Shadow Copy时,回收过程中资源释放不彻底会引发后续加载问题。

  • 解决方案:
    • 若禁用回收后问题消失,调整回收触发条件:比如将固定时间回收改为仅当内存/CPU占用超过阈值时回收,避开业务高峰时段。
    • 开启应用池的「回收时加载用户配置文件」选项,确保进程回收时资源释放更彻底。

3. Github Copilot忽略文件夹的验证

将appsettings移至copilot_ignore文件夹后,需确认部署流程未受影响:

  • 检查点:
    • 验证发布配置或部署脚本未将HtmlAgilityPack DLL误纳入忽略规则,确保它被正确复制到应用的bin目录。
    • 确认copilot_ignore文件夹的权限与应用其他目录一致,避免权限继承问题间接影响程序集加载。

4. 程序集加载上下文与依赖排查

  • 版本冲突检查:确认项目中仅引用了一个版本的HtmlAgilityPack,无依赖的其他程序集版本冲突。可通过NuGet包管理器或dotnet list package命令核查。
  • 预加载优化:在应用启动时预加载HtmlAgilityPack,避免后续动态加载出现异常。在Program.cs中添加:
    using System.Reflection;
    
    var builder = WebApplication.CreateBuilder(args);
    // 预加载HtmlAgilityPack,替换为实际版本和公钥令牌
    Assembly.Load("HtmlAgilityPack, Version=1.11.54.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a");
    

5. 系统临时文件清理的规避

系统自带的磁盘清理工具可能误删Shadow Copy的临时文件,导致加载失败:

  • 解决方案:将Shadow Copy临时目录设置为非系统默认的临时文件夹,并在系统清理规则中排除该目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 12:42:44