无法绑定到目标方法,因为其签名或安全透明性与委托类型的签名或安全透明性不兼容

时间:2012-08-22 15:59:13

标签: c# delegates visual-studio-2012 windowsformshost

除了安装Visual Studio 2012之外,我们现有的应用程序现在在尝试创建委托时崩溃了。

为什么我们在运行我们的应用程序时遇到此错误(不是在调试中运行...只是正常运行.exe ...没有重新编译,或者除了安装Visual Studio 2012之外还做了什么)?

Visual Studio 2012是否以某种方式更新.net 4.0 WindowsFormsIntegration?

有关如何解决这个问题的任何建议吗?

  

'在类型'MyWindowsFormsHost'上调用与之匹配的构造函数   指定的绑定约束引发了异常。'

内部例外:

  

无法绑定到目标方法,因为它的签名或安全性   透明度与委托类型

的透明度不兼容

违规的班级和行:

internal class MyWindowsFormsHost : WindowsFormsHost
{
    private delegate void NotifyChildFocus(ref Message m);
    private readonly NotifyChildFocus childGotFocus;

    public MyWindowsFormsHost()
    {
         //this line crashes now (and did not before VS2012 install)
         this.childGotFocus = Delegate.CreateDelegate(typeof(NotifyChildFocus),
                                 this, "NotifyActivateApp") as NotifyChildFocus;
    }
}

更新:发现WindowsFormsHost上不再存在NotifyActiveateApp方法。我不明白的是,使用visual studio 2012安装.net 4.5如何影响我现有的4.0应用程序。

更新:为了解决这个问题,我使用了反射来检查NotifyActivateApp方法是否存在。 (如果它不存在,那么应用程序正在修补的.net版本中运行......我不必担心这个子焦点代码被编写修复的激活错误)。

    MethodInfo methodInfo = (typeof(WindowsFormsHost)).GetMethod("NotifyActivateApp", BindingFlags.NonPublic | BindingFlags.Instance);
if (methodInfo != null)
{
     this.childGotFocus = Delegate.CreateDelegate(typeof(NotifyChildFocus), this, "NotifyActivateApp") as NotifyChildFocus;
}

微软的注意事项:感谢你修复你的错误...我希望你能以一种不破坏现有代码的方式推出它。

0 个答案:

没有答案