Как получить сборку (System.Reflection.Assembly) для заданного типа в .Net?
В .Net, учитывая имя типа, существует метод, который сообщает мне, в какой сборке (экземпляр System.Reflection.Assembly) этот тип определен?
Я предполагаю, что в моем проекте уже есть ссылка на эту сборку, просто нужно знать, какой из них есть.
Ответ 1
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";
}
Это также предполагает, что ваш тип объявлен в корне. Вам нужно будет предоставить пространство имен или охватывающие типы в имени или повторить его таким же образом.
Ответ 2
Assembly.GetAssembly(typeof(System.Int32))
Замените System.Int32 тем типом, который вам понадобится. Поскольку он принимает параметр Type, вы можете сделать что угодно, например:
Я адаптировал принятый ответ для своих целей (вернув объект сборки вместо имени сборки) и реорганизовал код для 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 на принятый ответ.
Ответ 4
Type.GetType(typeNameString).Assembly
Ответ 5
Если вы можете использовать его, этот синтаксис является самым коротким/самым чистым: