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

.NET程序集未在GAC找到时的查找路径及Castle.Core版本匹配问题

Castle.Core 程序集加载异常问题解析

异常信息

FileLoadException: Could not load file or assembly 'Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

关键概念说明

  • Pre binding(预绑定):.NET运行时在实际加载程序集前的前置检查流程,会依据配置、依赖关系确定目标程序集的版本和位置,提前规避版本不匹配导致的运行崩溃。
  • calling assembly(调用程序集):触发当前程序集加载请求的程序集。比如你的regression.TestSuite可能间接引用了某个依赖Castle.Core 4.0.0.0的第三方库,这个第三方库就是调用程序集。

日志疑问与问题排查

1. .NET如何确定程序集查找路径?

即便你的项目没有直接引用Castle.Core,.NET仍会按以下逻辑查找:

  • 优先检查GAC(全局程序集缓存),日志显示这一步未找到目标程序集;
  • 随后会从调用程序集的输出目录查找——也就是你的regression.TestSuite的bin/Debug目录。原因是你项目依赖的某个第三方库(比如NHibernate、Moq这类常用依赖Castle.Core的工具库)在运行时需要加载Castle.Core,.NET会自动前往调用程序集的输出目录尝试获取。

2. Binding Redirect不生效的原因及解决办法

你更新bindingRedirect到5.0.0.0但问题依旧,可从以下方向排查:

  • 配置不完整:确保app.config中的dependentAssembly配置覆盖了所有可能的旧版本范围,示例如下:
    <dependentAssembly>
      <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
    </dependentAssembly>
    
    注意oldVersion要包含4.0.0.0这个版本。
  • 配置未生效:清理项目的bin和obj目录,重新生成解决方案;如果是测试项目,确认测试运行环境加载的是更新后的app.config。
  • 嵌套依赖冲突:检查项目的间接依赖,是否存在多个第三方库各自依赖不同版本Castle.Core的情况,导致bindingRedirect被忽略。可通过dotnet list package --include-transitive(.NET Core/.NET 5+)或NuGet包管理器查看所有间接依赖。
  • 定位触发源:回到Fuslogvw日志,找到calling assembly的具体名称,明确是哪个库在请求4.0.0.0版本,针对性处理该库的依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:10:25