Finden Sie Typhierarchie -Assemblys mit mono.cecil
-
16-10-2019 - |
Frage
Ich versuche, eine Methode zu implementieren, die einen Typ empfängt und alle Baugruppen zurückgibt, die ihre Grundtypen enthalten.
Zum Beispiel:
Klasse A
ist ein Basistyp (Klasse A
gehört zur Versammlung C: a.dll)
Klasse B
Erben von A
(Klasse B
gehört zur Versammlung C: B.dll)
Klasse C
Erben von B
(Klasse C
gehört zur Versammlung 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" }
}
Mein Hauptproblem ist das AssemblyDefinition
von mono.cecil enthält keine Eigenschaften wie Ort.
Wie kann ein Montageort mit einem gefunden werden AssemblyDefinition
?
Lösung
Eine Baugruppe kann aus mehreren Modulen bestehen, sodass sie an sich nicht wirklich einen Ort hat. Das Hauptmodul der Baugruppe hat jedoch einen Ort:
AssemblyDefinition assembly = ...;
ModuleDefinition module = assembly.MainModule;
string fileName = module.FullyQualifiedName;
Sie könnten also etwas in der Reihe von:
public IEnumerable<string> GetAssembliesFromInheritance (TypeDefinition type)
{
while (type != null) {
yield return type.Module.FullyQualifiedName;
if (type.BaseType == null)
yield break;
type = type.BaseType.Resolve ();
}
}
Oder eine andere Variante, die Ihnen mehr gefällt.