c# - example - ¿Cómo obtener el ensamblado(System.Reflection.Assembly) para un tipo dado en.Net?
assembly c# example (5)
He adaptado la respuesta aceptada para mis propios fines (devolver el objeto de ensamblaje en lugar del nombre de ensamblado) y refactoré el código para VB.NET y 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
Solo lo estoy compartiendo aquí si alguien más quisiera una solución LINQy para la respuesta aceptada.
En .Net, dado un nombre de tipo, ¿hay algún método que me indique en qué ensamblado (instancia de System.Reflection.Assembly) se define ese tipo?
Supongo que mi proyecto ya tiene una referencia a ese conjunto, solo necesito saber cuál es.
Si puede usarlo, esta sintaxis es la más corta / más limpia:
typeof(int).Assembly
Assembly.GetAssembly supone que tiene una instancia del tipo, y Type.GetType supone que tiene el nombre de tipo completo que incluye el nombre del ensamblado.
Si solo tiene el nombre de tipo de base, debe hacer algo más como esto:
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";
}
Esto también asume que su tipo está declarado en la raíz. Debería proporcionar el espacio de nombre o los tipos que lo incluyen en el nombre, o repetir de la misma manera.
Assembly.GetAssembly(typeof(System.Int32))
Reemplace System.Int32
con el tipo que necesite. Como acepta un parámetro Type
, puede hacer casi cualquier cosa de esta manera, por ejemplo:
string GetAssemblyLocationOfObject(object o) {
return Assembly.GetAssembly(o.GetType()).Location;
}
Type.GetType(typeNameString).Assembly