Почему я не могу вызвать Delegate.CreateDelegate в моей переносимой библиотеке классов?

У меня следующая проблема: хочу позвонитьDelegate.CreateDelegate из моей Портативной библиотеки классов, предназначенной для приложений .NET 4.5, Windows Phone 8 и Windows 8 Store, но мой код не компилируется. Компилятор говорит, что не может найти метод наDelegate тип.

Самое смешное, что, например, библиотеку PRISM от Microsoft можно назватьDelegate.CreateDelegate» из портативной библиотеки классов. Это происходит вDelegateReference учебный класс. Портативная библиотека классов PRISM предназначена для .NET 4.0, приложений для Магазина Windows 8, Windows Phone 8 и Silverlight 5 (и, следовательно, для еще более ограничительного набора).

Код, который не компилируется, выглядит так:

public class MyClass
{
    public void MyMethod(EventHandler handler)
    {
        var @delegate = Delegate.CreateDelegate(typeof (OpenEventHandler), null, handler.GetMethodInfo());
    }
}

public delegate void OpenEventHandler(T target, object sender, EventArgs arguments);

Пример можно скачать здесь:https://dl.dropboxusercontent.com/u/14810011/PortableClassLibraryReferenceProblem.zip

Он содержит мой библиотечный проект и очень упрощенную версию проекта PRISM PubSubEvents, содержащую толькоDelegateReference класс и его интерфейс. Полный исходный код последнего можно найти здесь:http://prismwindowsruntime.codeplex.com/SourceControl/latest

Что я могу сделать, чтобы использовать всеDelegate Члены? Заранее спасибо за вашу помощь!

РЕДАКТИРОВАТЬ после Хенка Холтерманаответ:

GetMethodInfo () - это метод расширения, который поддерживается подмножеством PCL. Во всяком случае, это не связано с проблемой, которую я не могу назватьDelegate.CreateDelegate пока ПРИЗМАПроект PCL может.

РЕДАКТИРОВАТЬ 2 после комментария Ганса Пассанта:

Я просто поиграл и обнаружил, что когда я активирую Silverlight 5 в качестве цели переносимой библиотеки, тоDelegate.CreateDelegate действительно доступен (и метод расширения GetMethodInfo больше не существует). ЯвляетсяDelegate.CreateDelegate тогда может быть сопоставлен с другим API для Windows 8 Store и приложений для телефона внутри? Это'Единственный способ, которым я мог придумать, как этот метод внезапно станет доступным только потому, что я добавил Silverlight 5 в качестве допустимой цели.

(Вы можете воспроизвести это, щелкнув правой кнопкой мыши на "MyPortableClassLibrary» проект, нажмите "Свойства» и вБиблиотека" нажмите на кнопку изменить, чтобы выбрать рамки, на которые ориентирована переносимая библиотека.)

Кроме того, ранее сегодня я создал проект Windows Store App и увидел, что не былоCreateDelegate метод, определенный наDelegate класс в .NET для Windows Runtime.

В моем реальном проекте я не хочу ориентироваться на Silverlight 5, поскольку я используюIObservable а такжеIObserver интенсивно использующий Rx, и эти интерфейсы не определены в Silverlight.

Ответы на вопрос(2)

Ваш ответ на вопрос