我正在尝试实现一个接收类型的方法,并返回包含其基类型的所有程序集。
例如:
类 A
是基类型(类 A
属于程序集 c:\ A.dll )
类 B
继承自 A
(类 B
属于程序集 c:\ B.DLL )
类 C
继承自 B
(类 C
属于程序集 c:\ c.dll )
public IEnumerable<string> GetAssembliesFromInheritance(string assembly,
string type)
{
// If the method recieves type C from assembly c:\C.dll
// it should return { "c:\A.dll", "c:\B.dll", "c:\C.dll" }
}
我的主要问题是来自Mono.Cecil的AssemblyDefinition
不包含任何属性,例如 Location 。
如果找到 AssemblyDefinition
?
答案 0 :(得分:3)
程序集可以由多个模块组成,因此它本身并没有真正的位置。程序集的主模块确实有一个位置:
AssemblyDefinition assembly = ...;
ModuleDefinition module = assembly.MainModule;
string fileName = module.FullyQualifiedName;
所以你可以写下以下内容:
public IEnumerable<string> GetAssembliesFromInheritance (TypeDefinition type)
{
while (type != null) {
yield return type.Module.FullyQualifiedName;
if (type.BaseType == null)
yield break;
type = type.BaseType.Resolve ();
}
}
或任何其他令您满意的变体。