Frage

In .Net, da ein Typ-Namen, gibt es eine Methode, die mir sagt, in welcher assembly (Instanz von System.Reflexion.Montage), der Typ definiert ist?

Ich gehe davon aus, dass mein Projekt hat bereits einen Verweis auf die assembly, brauchen wir nur zu wissen, welches es ist.

War es hilfreich?

Lösung

Montage.GetAssembly vorausgesetzt, Sie haben eine Instanz von Typ und Typ.GetType davon ausgegangen, dass Sie den vollständig qualifizierten Namen eingeben, die umfasst die Montage Namen.

Wenn Sie nur die Basis-Namen eingeben, müssen Sie etwas tun, eher wie dieses:

public static String GetAssemblyNameContainingType(String typeName) 
{
    foreach (Assembly currentassembly in AppDomain.CurrentDomain.GetAssemblies()) 
    {
        Type t = currentassembly.GetType(typeName, false, true);
        if (t != null) {return currentassembly.FullName;}
    }

    return "not found";
}

Diese übernimmt auch Ihren Typ deklariert ist, die in der Wurzel.Sie benötigen würden, um die namespace-oder einschließenden Typen in der name oder die Iteration in der gleichen Weise.

Andere Tipps

Assembly.GetAssembly(typeof(System.Int32))

Ersetzen System.Int32 mit welcher Art Sie passieren zu müssen.Weil Sie akzeptiert Type parameter, die Sie tun können, fast alles dieser Art, zum Beispiel:

string GetAssemblyLocationOfObject(object o) {
    return Assembly.GetAssembly(o.GetType()).Location;
}

Ich habe an die akzeptierte Antwort für meine eigenen Zwecke (Rücksendung der assembly-Objekt statt den Namen der assembly), und Refactoring der code für VB.NET und LINQ:

Public Function GetAssemblyForType(typeName As String) As Assembly
    Return AppDomain.CurrentDomain.GetAssemblies.FirstOrDefault(Function(a) a.GetType(typeName, False, True) IsNot Nothing)
End Function

Ich bin nur teilen es hier, wenn jemand möchte ein LINQy Lösung der akzeptierten Antwort.

Type.GetType(typeNameString).Assembly

Wenn Sie es verwenden können, diese syntax ist die kürzeste/saubersten:

typeof(int).Assembly
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top