Warum kann ich Delegate.CreateDelegate in meiner portablen Klassenbibliothek nicht aufrufen?

Ich habe folgendes Problem: Ich möchte anrufenDelegate.CreateDelegate In meiner Portable Class Library, die auf .NET 4.5, Windows Phone 8 und Windows 8 Store Apps abzielt, wird mein Code jedoch nicht kompiliert. Der Compiler gibt an, dass er die Methode auf der nicht finden kannDelegate Art.

Das Lustige ist, dass z. Die PRISM-Bibliothek von Microsoft kann "Delegate.CreateDelegate" aus einer portablen Klassenbibliothek aufrufen. Das tut es in derDelegateReference Klasse. Die portable PRISM-Klassenbibliothek zielt auf .NET 4.0, Windows 8 Store Apps, Windows Phone 8 und Silverlight 5 (und damit auf eine noch restriktivere Gruppe) ab.

Der Code, der nicht kompiliert wird, sieht folgendermaßen aus:

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);

Ein Beispiel kann hier heruntergeladen werden:https://dl.dropboxusercontent.com/u/14810011/PortableClassLibraryReferenceProblem.zip

Es enthält mein Bibliotheksprojekt und eine stark reduzierte Version des PRISM PubSubEvents-Projekts, die nur das enthältDelegateReference Klasse und ihre Schnittstelle. Den vollständigen Quellcode des letzteren finden Sie hier:http://prismwindowsruntime.codeplex.com/SourceControl/latest

Was kann ich tun, um alles zu nutzen?Delegate Mitglieder? Vielen Dank im Voraus für Ihre Hilfe!

BEARBEITEN Nach der Antwort von Henk Holterman:

GetMethodInfo () ist eine Erweiterungsmethode, die von der PCL-Teilmenge unterstützt wird. Wie auch immer, das hat nichts mit dem Problem zu tun, das ich nicht anrufen kannDelegate.CreateDelegate während PRISM PCL-Projekt kann.

BEARBEITEN 2 nach Hans Passants Kommentar:

Ich habe nur rumgespielt und festgestellt, dass ich dann Silverlight 5 als Ziel der portablen Bibliothek aktiviereDelegate.CreateDelegate ist in der Tat zugänglich (und die GetMethodInfo-Erweiterungsmethode ist nicht mehr verfügbar). IstDelegate.CreateDelegate dann vielleicht intern auf eine andere API für Windows 8 Store und Phone Apps abgebildet? Nur so konnte ich mir vorstellen, wie diese Methode plötzlich verfügbar sein würde, nur weil ich Silverlight 5 als gültiges Ziel hinzugefügt habe.

(Sie können dies reproduzieren, indem Sie mit der rechten Maustaste auf das Projekt "MyPortableClassLibrary" klicken, auf "Eigenschaften" klicken und auf der Registerkarte "Bibliothek" auf "Ändern" klicken, um die Frameworks auszuwählen, auf die die portable Bibliothek abzielt.)

Außerdem habe ich heute ein Windows Store-App-Projekt erstellt und festgestellt, dass es kein Projekt gibtCreateDelegate Methode definiert auf derDelegate Klasse in .NET für Windows Runtime.

In meinem aktuellen Projekt möchte ich Silverlight 5 nicht als Ziel verwendenIObservable<T> undIObserver<T> Rx wird häufig verwendet, und diese Schnittstellen sind in Silverlight nicht definiert.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage