C#Relection addeventhandler:create Delegate fail无法绑定到目标方法

C#Relection addeventhandler:create Delegate fail无法绑定到目标方法,c#,reflection,delegates,C#,Reflection,Delegates,我试图从外部dll文件添加事件,但我得到argumentexception“无法绑定到目标方法,因为其签名或安全透明性与委托类型的签名或安全透明性不兼容” 我试图搜索解决方案,但它们与我的代码不兼容 这是dll文件中的代码 public class StartProcess { public StartProcess(){} public delegate void MSTStepInformEventHandler(object sender, MSTStepInform

我试图从外部dll文件添加事件,但我得到argumentexception“无法绑定到目标方法,因为其签名或安全透明性与委托类型的签名或安全透明性不兼容”

我试图搜索解决方案,但它们与我的代码不兼容

这是dll文件中的代码

public class StartProcess
{
     public StartProcess(){}

     public delegate void MSTStepInformEventHandler(object sender, MSTStepInformEventArg e);
     public event MSTStepInformEventHandler StepInformed;

     protected virtual void OnStepInformed(MSTStepInformEventArg e) 
     {
          if (this.StepInformed != null)
          {
               this.StepInformed(this, e);
          }
     }

     public void Start()
     {
          this.OnStepInformed(new MSTStepInformEventArg() { Info = DateTime.Now.toString()});
     }

public class MSTStepInformEventArg : EventArgs
{
    public MSTStepInformEventArg() { }
    public string Info { get; set; }
}
下面是反射代码

class Test
{
    void HandleEvent(object sender, MainDLL.MSTStepInformEventArg e)
    {
        Console.WriteLine("HandleEvent called " + e.Info);
    }

    static void Main()
    {
        Assembly ass = Assembly.LoadFrom("StartProcess.dll");

        Type classEx = ass.GetType("StartProcess.StartProcess");

        Test test = new Test();

        object obj = Activator.CreateInstance(classEx);

        MethodInfo method = typeof(Test).GetMethod("HandleEvent", BindingFlags.NonPublic | BindingFlags.Instance);

        EventInfo eventInfo = classEx.GetEvent("StepInformed");

        Type type = eventInfo.EventHandlerType;

        Delegate handler = Delegate.CreateDelegate(type, test, method); // Exception throw is here -----

        eventInfo.AddEventHandler(obj, handler);

        classEx.InvokeMember("Start", BindingFlags.InvokeMethod, null, obj, null);
    }
}

请帮助…

您可以通过删除不需要复制的所有内容来进一步简化代码吗?我看到
StartProcess
类位于
StartProcess
命名空间内,而在
HandleEvent
方法中,第二个参数的类型似乎位于
MainDLL
命名空间内。。。对吗?您是否将两个名为
MSTStepInformEventArg
的类型定义为两个不同的名称空间?多亏了il-vic,我的项目在结构上出现了一些问题。我再次检查,在将MSTStepInformEventArg与StartProcess放在同一个名称空间后,我的程序工作了。您可以通过删除不需要复制的所有内容来进一步简化代码吗?我看到
StartProcess
类位于
StartProcess
名称空间内,而在
HandleEvent
方法中,第二个参数的类型似乎在
MainDLL
名称空间中。。。对吗?您是否将两个名为
MSTStepInformEventArg
的类型定义为两个不同的名称空间?多亏了il-vic,我的项目在结构上出现了一些问题。我再次检查,在将MSTStepInformEventArg与StartProcess放在同一名称空间后,我的程序开始工作。