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

使用Mono.Cecil注入程序集引用后找不到依赖程序集如何解决

问题核心原因

你仅通过ImportReference导入了Tracer类的方法引用,但Mono.Cecil不会自动将该类型所属的程序集添加到目标程序集的引用列表中,这是最常见的遗漏操作。同时报错信息中提示的程序集名称instrospect.types和你提到的实际文件名introspect.types.dll存在拼写差异,也可能是加载失败的原因。

修复步骤

1. 手动添加程序集引用到目标模块

在保存修改后的程序集之前,将Tracer所属的程序集显式添加到目标模块的引用列表中,参考代码:

// 先获取Tracer所属程序集的信息
var tracerAssemblyName = typeof(Tracer).Assembly.GetName();
// 创建Mono.Cecil的程序集引用对象
var tracerAssemblyRef = new AssemblyNameReference(tracerAssemblyName.Name, tracerAssemblyName.Version)
{
    Culture = string.IsNullOrEmpty(tracerAssemblyName.CultureInfo.Name) ? "neutral" : tracerAssemblyName.CultureInfo.Name,
    PublicKeyToken = tracerAssemblyName.GetPublicKeyToken()
};
// 去重后添加到目标模块的引用列表
if (!module.AssemblyReferences.Any(r => r.Name == tracerAssemblyRef.Name))
{
    module.AssemblyReferences.Add(tracerAssemblyRef);
}

这段代码需要放在module.Write之前执行即可。

2. 修正程序集名称拼写

报错中要求加载的程序集名称是instrospect.types,你放置的文件名为introspect.types.dll,多了一个字母t,请确认:

  • 是你拼写错误放错了文件,还是创建引用时写错了程序集名称,保证引用名称和实际文件名完全一致。

3. 其他兼容性检查

  • 确认introspect.types.dll的版本和报错中要求的1.0.0.0完全匹配,若版本不一致可以添加绑定重定向,或者直接使用版本匹配的dll
  • 确认introspect.types.dll的目标框架和你修改后的程序集目标框架兼容,例如.NET 6的程序集无法直接引用.NET Framework编译的程序集
  • 若introspect.types.dll是强签名程序集,需保证引用中的PublicKeyToken和实际dll的签名公钥完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:33:00