你的期望是不正确的。
Cecil 与 System.Reflection 不同,对于模块,Cecil 区分了在该模块中定义的类型:TypeDefinition 和在另一个模块中定义的类型:TypeReference。
这就是 BaseType 是 TypeReference 实例的原因,在您的情况下,对 ClassA 的引用位于 AssemblyB 内部。如果要查看 BaseType 的定义位置,而不是使用位置,则必须使用 TypeReference 的 Scope 属性。
如果您在 Resolve 中有错误,那将是一个完全不同的问题。但是你没有显示任何关于这个错误的信息,所以我们不得不猜测程序集解析器不知道在哪里寻找 AssemblyA。根据您的评论,情况就是这样。以下是您可以执行的操作:
var resolver = new DefaultAssemblyResolver ();
resolver.AddSearchDirectory ("path/to/AssemblyA");
resolver.AddSearchDirectory ("path/to/AssemblyB");
var a = AssemblyDefinition.ReadAssembly (
"path/to/AssemblyA/AssemblyA.dll",
new ReaderParameters { AssemblyResolver = resolver });
var b = AssemblyDefinition.ReadAssembly (
"path/to/AssemblyB/AssemblyB.dll",
new ReaderParameters { AssemblyResolver = resolver });
这样,您可以确保您的所有程序集共享一个公共解析器,该解析器知道在哪里可以找到您的程序集。Resolve 可以正常工作。