C#Relection addeventhandler:create Delegate fail无法绑定到目标方法
我试图从外部dll文件添加事件,但我得到argumentexception“无法绑定到目标方法,因为其签名或安全透明性与委托类型的签名或安全透明性不兼容” 我试图搜索解决方案,但它们与我的代码不兼容 这是dll文件中的代码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
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放在同一名称空间后,我的程序开始工作。