Cómo llegar C#.Net ¿Asamblea por nombre?


Hay algo como:

AppDomain.CurrentDomain.GetAssemblyByName("TheAssemblyName")

Así que en lugar de bucear a través de AppDomain.CurrentDomain.GetAssemblies(), podríamos simplemente obtener el ensamblaje específico directamente.

Author: wonea, 2009-12-16

5 answers

¿Ha intentado mirar Asamblea.Carga(...)?

 82
Author: cyberzed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-16 09:44:33

Resolví con LINQ

Assembly GetAssemblyByName(string name)
{
    return AppDomain.CurrentDomain.GetAssemblies().
           SingleOrDefault(assembly => assembly.GetName().Name == name);
}
 45
Author: Fabio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-17 09:05:01

Depende de lo que estés tratando de lograr.

Si solo desea obtener el ensamblado, entonces debe llamar a System.Reflection.Assembly.Load() (como ya se ha señalado). Esto se debe a que.NET comprueba automáticamente si el ensamblado ya se ha cargado en el AppDomain actual y no lo vuelve a cargar si lo ha hecho.

Si solo está tratando de comprobar si el ensamblaje se ha cargado o no (por alguna razón de diagnóstico, tal vez), entonces tiene que hacer un bucle sobre todos los elementos cargados Asamblea.

Otra razón por la que podría querer hacer un bucle es si solo conoce parte de la información del ensamblado (p. ej. no estás seguro de la versión). Es decir, sabes lo suficiente como para "reconocerlo cuando lo ves", pero no lo suficiente como para cargarlo. Sin embargo, ese es un escenario bastante oscuro e improbable.

 14
Author: EMP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-16 08:26:45

Para aquellos que solo necesitan acceder a los metadatos del ensamblado (versión, etc.) echa un vistazo a la asamblea.ReflectionOnlyLoad (nombre), que es capaz de cargar solo los metadatos, posiblemente ahorrando en memoria y IO.

 5
Author: Mathieu Frenette,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-05 02:00:02

Eche un vistazo al Sistema.Reflexión.Clase de ensamblaje, en particular el método de carga: MSDN

 2
Author: Maximilian Mayerl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-16 08:11:19