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

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

UPDATE: Обнаружено, что метод NotifyActiveateApp больше не существует в WindowsFormsHost. Я не понимаю, как установка .net 4.5 с visual studio 2012 повлияла на мое существующее приложение 4.0.

UPDATE: чтобы обойти это, я использовал отражение, чтобы проверить, существует ли метод 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: спасибо за исправление вашей ошибки... Я просто хочу, чтобы вы развернули ее таким образом, чтобы не нарушить существующий код.

Ответы