除了安装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;
}
微软的注意事项:感谢你修复你的错误...我希望你能以一种不破坏现有代码的方式推出它。