Невозможно выполнить привязку к целевому методу, поскольку его подпись или прозрачность безопасности не совместимы с сигнатурой типа делегата.

Сделав только установку 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;
    }
}

ОБНОВЛЕНИЕ: Обнаружено, что метод NotifyActiveateApp больше не существует в WindowsFormsHost. Что я не понимаю, так это то, как установка.net 4.5 с visual studio 2012 повлияла на мое существующее приложение 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;
}

Примечание для Microsoft: Спасибо за исправление вашей ошибки... Я просто хотел бы, чтобы вы развернули ее так, чтобы не сломать существующий код.

0 ответов

Другие вопросы по тегам