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

基于.NET Framework 4.8的Autofac 6.0启动时DiagnosticSource加载异常

Autofac 6.0 加载 System.Diagnostics.DiagnosticSource 4.0.5.0 失败的排查与解决

核心原因

Autofac 6.0 及其依赖组件(如 Autofac.Extensions.DependencyInjection)原生依赖 System.Diagnostics.DiagnosticSource 4.0.5.0,即便你的项目全局引用5.0版本,也可能因绑定重定向未生效、GAC干扰或间接依赖冲突导致加载异常。

排查与修复步骤

  • 验证绑定重定向配置
    确认 App.config 中包含正确的重定向规则,覆盖所有旧版本到5.0:

    <configuration>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Diagnostics.DiagnosticSource" 
                              publicKeyToken="cc7b13ffcd2ddd51" 
                              culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" 
                            newVersion="5.0.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    

    注意公钥令牌cc7b13ffcd2ddd51必须准确,这是DiagnosticSource官方固定的公钥。

  • 检查GAC全局缓存
    .NET Framework会优先从GAC加载程序集,若GAC中存在4.0.5.0版本,会跳过你输出目录的5.0版本:

    1. 以管理员身份打开命令提示符,运行 gacutil /l System.Diagnostics.DiagnosticSource 查看已安装版本。
    2. 若存在4.0.5.0,执行 gacutil /u System.Diagnostics.DiagnosticSource,Version=4.0.5.0 卸载该版本。
  • 强制统一所有依赖版本
    在NuGet包管理器控制台执行以下命令,强制所有项目重新安装5.0版本的DiagnosticSource,自动修复依赖链和绑定重定向:

    Update-Package System.Diagnostics.DiagnosticSource -Reinstall
    
  • 排查间接依赖冲突
    通过NuGet包管理器的"依赖项"视图,检查是否有其他第三方包仍依赖4.0.5.0版本的DiagnosticSource。若存在,尝试更新这些包到兼容5.0版本的最新版。

  • 追踪程序集加载路径
    使用微软的Fusion Log Viewer(fuslogvw.exe)查看详细的程序集加载日志,确认Autofac尝试加载DiagnosticSource的具体路径和版本。若启用了影子复制(如ASP.NET项目),需确保影子复制目录中也包含5.0版本的DLL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:01:16