【问题标题】:VerificationException when using DynamicMethod in Silverlight在 Silverlight 中使用 DynamicMethod 时出现 VerificationException
【发布时间】:2011-08-05 05:40:24
【问题描述】:

我想通过委托调用某些方法,但收到了 VerificationException。我正在使用以下代码:

    internal delegate void Delegete_add_Startup(object o, StartupEventHandler s);
    Delegete_add_Startup del;

    public App()
    {
        //this.Startup += this.Application_Startup;

        Type[] parameterTypes = new Type[2];
        parameterTypes[0] = typeof(object);
        parameterTypes[1] = typeof(StartupEventHandler);

        MethodInfo mi = typeof(Application).GetMethod("add_Startup", BindingFlags.Public | BindingFlags.Instance);

        DynamicMethod method = new DynamicMethod(string.Empty, mi.ReturnType, parameterTypes);
        method.InitLocals = true;
        ILGenerator iLGenerator = method.GetILGenerator();
        iLGenerator.Emit(OpCodes.Ldarg_0);
        iLGenerator.Emit(OpCodes.Ldarg_1);
        iLGenerator.Emit(OpCodes.Call, mi);
        iLGenerator.Emit(OpCodes.Ret);
        del = (Delegete_add_Startup)method.CreateDelegate(typeof(Delegete_add_Startup));


        del(this, new StartupEventHandler(Application_Startup));


        this.Exit += this.Application_Exit;
        this.UnhandledException += this.Application_UnhandledException;

        InitializeComponent();
    }

基本上,我正在尝试调用

this.Startup += this.Application_Startup;

通过使用上述代码的委托。

这会产生一个 VerificationException:操作可能会破坏运行时异常。

通过将此代码放入全新 Silverlight App 项目的 App 构造函数中,这很容易重现。 我做错了什么?

【问题讨论】:

  • 我遇到了同样的问题。你找到任何线索了吗?即使使用非常简单的 OpCodes.Call 没有任何参数也没有返回值,我也遇到了问题。

标签: .net silverlight dynamicmethod


【解决方案1】:

对于您的情况,您可以将 OpCodes.Call 替换为 OpCodes.CallVirt,它应该会更好地工作(未经测试和未被理解,我是 Silverlight CLR 的新手)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多