Dlaczego nie mogę zadzwonić do Delegate.CreateDelegate w mojej przenośnej bibliotece klas?

Mam następujący problem: chcę zadzwonićDelegate.CreateDelegate z mojej przenośnej biblioteki klas ukierunkowanej na aplikacje .NET 4.5, Windows Phone 8 i Windows 8 Store, ale mój kod się nie kompiluje. Kompilator mówi, że nie może znaleźć metody naDelegate rodzaj.

Zabawne jest to, że np. biblioteka PRISM firmy Microsoft może wywoływać „Delegate.CreateDelegate” z przenośnej biblioteki klas. Robi to wDelegateReference klasa. Przenośna biblioteka klasy PRISM jest przeznaczona dla aplikacji .NET 4.0, Windows 8 Store Apps, Windows Phone 8 i Silverlight 5 (i tym samym jeszcze bardziej restrykcyjny zestaw).

Kod, który się nie kompiluje, wygląda tak:

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

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

Przykład można pobrać tutaj:https://dl.dropboxusercontent.com/u/14810011/PortableClassLibraryReferenceProblem.zip

Zawiera mój projekt biblioteczny i bardzo uproszczoną wersję projektu PRISM PubSubEvents zawierającego tylkoDelegateReference klasa i jej interfejs. Pełny kod źródłowy tego ostatniego można znaleźć tutaj:http://prismwindowsruntime.codeplex.com/SourceControl/latest

Co mogę zrobić, aby korzystać ze wszystkichDelegate członkowie? Z góry dziękuję za pomoc!

EDYTOWAĆ po odpowiedzi Henka Holtermana:

GetMethodInfo () to metoda rozszerzenia obsługiwana przez podzbiór PCL. W każdym razie nie jest to związane z problemem, którego nie mogę wywołaćDelegate.CreateDelegate podczas gdy projekt PCL PRISM może.

EDYCJA 2 po komentarzu Hansa Passanta:

Właśnie się bawiłem i dowiedziałem się, kiedy aktywuję Silverlight 5 jako cel przenośnej bibliotekiDelegate.CreateDelegate jest rzeczywiście dostępny (a metoda rozszerzenia GetMethodInfo już nie jest). JestDelegate.CreateDelegate następnie może zostać wewnętrznie zmapowany do innego API dla aplikacji Windows 8 Store and Phone? To jedyny sposób, w jaki mogłem pomyśleć o tym, jak ta metoda byłaby nagle dostępna tylko dlatego, że dodałem Silverlight 5 jako prawidłowy cel.

(Można to odtworzyć, klikając prawym przyciskiem myszy projekt „MyPortableClassLibrary”, klikając polecenie „Właściwości”, a następnie na karcie „Biblioteka” kliknij przycisk Zmień, aby wybrać struktury, na które kieruje przenośna biblioteka).

Również wcześniej stworzyłem projekt aplikacji Windows Store i zobaczyłem, że nie maCreateDelegate metoda zdefiniowana naDelegate klasa w .NET dla Windows Runtime.

W moim rzeczywistym projekcie nie chcę kierować na Silverlight 5 w miarę używaniaIObservable<T> iIObserver<T> mocno używa Rx i te interfejsy nie są zdefiniowane w Silverlight.

questionAnswers(2)

yourAnswerToTheQuestion