Как получить сборку (System.Reflection.Assembly) для данного типа в .Net?

StackOverflow https://stackoverflow.com/questions/1141121

Вопрос

Существует ли в .Net, учитывая имя типа, метод, который сообщает мне, в какой сборке (экземпляр System.Reflection.Assembly) определен этот тип?

Я предполагаю, что в моем проекте уже есть ссылка на эту сборку, просто нужно знать, какая именно.

Это было полезно?

Решение

Assembly.GetAssembly предполагает, что у вас есть экземпляр типа, а Type.GetType предполагает, что у вас есть полное имя типа, включающее имя сборки.

Если у вас есть только имя базового типа, вам нужно сделать что-то вроде этого:

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";
}

Это также предполагает, что ваш тип объявлен в корне.Вам нужно будет указать пространство имен или включающие типы в имени или выполнить итерацию таким же образом.

Другие советы

Assembly.GetAssembly(typeof(System.Int32))

Заменять System.Int32 с любым типом, который вам нужен.Потому что он принимает Type параметр, вы можете сделать что угодно таким образом, например:

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

Я адаптировал принятый ответ для своих целей (вернув объект сборки вместо имени сборки) и провел рефакторинг кода для VB.NET и 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

Я просто делюсь этим здесь, если кто-то еще хочет получить решение LINQy для принятого ответа.

Type.GetType(typeNameString).Assembly

Если вы можете его использовать, этот синтаксис будет самым коротким/чистым:

typeof(int).Assembly
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top