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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top