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

反射System.ValueTuple时System.Core 2.0.5.0加载失败及加载方式差异问题

关于System.ValueTuple反射时加载System.Core 2.0.5.0的异常问题

最近处理反射相关的场景时,碰到了一个针对System.ValueTuple程序集的奇怪异常:当遍历该程序集的类型并获取自定义属性时,会根据程序集加载方式的不同,抛出“无法加载文件或程序集System.Core 2.0.5.0”的错误。

触发异常的代码

只要执行这段遍历类型并获取属性的逻辑,就可能触发异常:

foreach (var type in valueTupleAssembly.GetTypes()) { 
    var attributes = type.GetCustomAttributes(typeof(string), false); 
}

不同加载方式的表现

  • 会触发异常的加载方式:使用Assembly.LoadFile或直接通过字节数组加载的Assembly.Load
    var valueTupleAssembly = Assembly.LoadFile(path);
    // 或者通过字节数组加载
    var valueTupleAssembly = Assembly.Load(File.ReadAllBytes(path));
    
  • 运行正常的加载方式:使用Assembly.LoadFrom
    var valueTupleAssembly = Assembly.LoadFrom(path);
    

待确认的疑问

我们知道System.ValueTuple是支持版本重定向的,它对System.Core的依赖理论上应该自动解析为当前执行环境的可用版本,但这里有两个关键点还需要明确:

  1. 为什么只有反射TupleExtensions类型时才会触发System.Core 2.0.5.0的解析请求?同程序集里的其他类型都没有这个问题。
  2. 为什么LoadFrom不会出现异常?目前的猜测是.NET的程序集绑定加载器(Fusion)在LoadFrom的场景下,自动完成了System.Core 2.0.5.0到当前环境可用版本的重定向,但这个机制的具体原因还需要进一步验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:50:09