Hooking into an “OnLoad” for class library

后端 未结 3 1256
深忆病人
深忆病人 2020-12-18 10:48

Does anyone know if there\'s a way to hook into an \"OnLoad\" event to run some operations when an assembly loads?

Specifically, I am creating a plug-in for an appli

相关标签:
3条回答
  • 2020-12-18 11:04

    It is really sad that writing a Main() function in an Assembly DLL is never called by the .NET framework. It seems that Microsoft forgot that.

    But you can easily implement it on your own:

    In the DLL assembly you add this code:

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

    Then in the Exe Assembly that loads this DLL you add this function:

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

    Obviously you should call this function at the very beginning before doing anything else with that Assembly.

    0 讨论(0)
  • 2020-12-18 11:17

    You need to hook on to AssemblyLoad event.

    Refer- http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyload.aspx

    0 讨论(0)
  • 2020-12-18 11:31

    C# does not provide a way to do that but the underlying IL code does via module initializers. You can use tools like Fody/ModuleInit to turn a specially named static C# class to run as a module initializer which will be run when your dll is loaded.

    0 讨论(0)
提交回复
热议问题