C# 挂在一个;“满负荷”;对于类库
有人知道当程序集加载时,是否有方法钩住“OnLoad”事件来运行某些操作吗C# 挂在一个;“满负荷”;对于类库,c#,.net,dll,assemblies,onload,C#,.net,Dll,Assemblies,Onload,有人知道当程序集加载时,是否有方法钩住“OnLoad”事件来运行某些操作吗 具体来说,我正在为应用程序创建一个插件。插件的DLL被加载,对象开始被使用,但问题是我需要在任何事情发生之前动态加载另一个程序集。无法将此程序集复制到应用程序的目录,并且必须对其不可见。您需要挂接到AssemblyLoad事件 提及- 在程序集DLL中编写Main()函数从未被.NET framework调用,这真是令人伤心。 微软似乎忘记了这一点 但您可以轻松地自行实施: 在DLL程序集中添加以下代码: using S
具体来说,我正在为应用程序创建一个插件。插件的DLL被加载,对象开始被使用,但问题是我需要在任何事情发生之前动态加载另一个程序集。无法将此程序集复制到应用程序的目录,并且必须对其不可见。您需要挂接到
AssemblyLoad
事件
提及-
在程序集DLL中编写Main()函数从未被.NET framework调用,这真是令人伤心。 微软似乎忘记了这一点 但您可以轻松地自行实施: 在DLL程序集中添加以下代码:
using System.Windows.Forms;
public class Program
{
public static void Main()
{
MessageBox.Show("Initializing");
}
}
然后在加载此DLL的Exe程序集中添加以下函数:
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);
}
}
显然,在对该程序集执行任何其他操作之前,您应该在一开始就调用此函数。C#没有提供执行此操作的方法,但底层IL代码通过。您可以使用一些工具,例如将一个特殊命名的静态C#类作为模块初始值设定项运行,该初始值设定项将在加载dll时运行。我确实看过,但问题是类库中没有“Main”函数。。。在应用程序尝试实例化任何内容之前,我需要一个地方将钩子放在那里。可能重复的