c# .net dll assemblies onload

c# - Enganche en un "OnLoad" para la biblioteca de la clase



.net dll (3)

¿Alguien sabe si hay una forma de conectar un evento "OnLoad" para ejecutar algunas operaciones cuando se carga un ensamblaje?

Específicamente, estoy creando un complemento para una aplicación. El archivo DLL del complemento se carga y los objetos comienzan a usarse, pero el problema es que necesito cargar otro ensamblaje dinámicamente antes de que ocurra algo. Este ensamblaje no se puede copiar en el directorio de la aplicación y debe permanecer invisible para él.



Es realmente triste que .NET framework nunca invoque la escritura de una función Main () en una DLL de ensamblaje. Parece que Microsoft olvidó eso.

Pero puede implementarlo fácilmente por su cuenta:

En el conjunto de DLL agrega este código:

using System.Windows.Forms; public class Program { public static void Main() { MessageBox.Show("Initializing"); } }

Luego, en el ensamblado Exe que carga esta DLL, agrega esta función:

using System.Reflection; void InitializeAssembly(Assembly i_Assembly) { Type t_Class = i_Assembly.GetType("Program"); if (t_Class == null) return; // class Program not implemented MethodInfo i_Main = t_Class.GetMethod("Main"); if (i_Main == null) return; // function Main() not implemented try { i_Main.Invoke(null, null); } catch (Exception Ex) { throw new Exception("Program.Main() threw exception in/n" + i_Assembly.Location, Ex); } }

Obviamente deberías llamar a esta función desde el principio antes de hacer cualquier otra cosa con esa Asamblea.


C # no proporciona una manera de hacerlo, pero el código IL subyacente lo hace a través de los inicializadores del módulo . Puede usar herramientas como Fody / ModuleInit para convertir una clase C # estática especialmente nombrada para que se ejecute como un inicializador de módulo que se ejecutará cuando cargue su dll.