我正在为桌面,Windows 8商店和Windows手机同时构建新的应用程序.所以我创建了可移植类库,以便在所有平台上具有通用功能.我的问题是,当我尝试在PCL中重用我的代码时,我无法访问库中的一些方法和属性.根据MSDN,支持这些方法,但我现在知道为什么我无法访问它们.
var property = memberExpression.Member as PropertyInfo;
if (property == null)
{
}
var getMethod = property.GetGetMethod(true);
if (getMethod.IsStatic)
{}
Run Code Online (Sandbox Code Playgroud)
这是无法编译的代码片段.GetGetMethod和IsStatic在Visual Studio编辑器中是红色的.我不知道为什么会发生这种情况以及如何访问这些属性.
所以,如果那里的任何人做过类似的事情,请帮我编译这段代码.
我有以下问题:我想Delegate.CreateDelegate从我的可移植类库中调用.NET 4.5,Windows Phone 8和Windows 8 Store Apps,但我的代码无法编译.编译器说它无法在Delegate类型上找到方法.
有趣的是,例如Microsoft的PRISM库可以从便携式类库中调用'Delegate.CreateDelegate'.它在DelegateReference课堂上这样做.PRISM便携式类库面向.NET 4.0,Windows 8商店应用程序,Windows Phone 8和Silverlight 5(因此是一个更具限制性的集合).
不编译的代码如下所示:
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);
Run Code Online (Sandbox Code Playgroud)
可以在此处下载示例:https://dl.dropboxusercontent.com/u/14810011/PortableClassLibraryReferenceProblem.zip
它包含我的库项目和PRISM PubSubEvents项目的非常剥离版本,该项目仅包含DelegateReference类及其接口.后者的完整源代码可以在这里找到:http://prismwindowsruntime.codeplex.com/SourceControl/latest
如何使用所有Delegate会员?预先感谢您的帮助!
在亨克霍尔特曼的答案之后编辑:
GetMethodInfo()是PCL子集支持的扩展方法.无论如何,这与我Delegate.CreateDelegate在PRISM的PCL项目中无法调用的问题无关.

在Hans Passants评论之后编辑2:
我只是玩了一遍,发现当我激活Silverlight 5作为可移植库的目标时,Delegate.CreateDelegate确实可以访问(并且GetMethodInfo扩展方法不再是).是Delegate.CreateDelegate那么也许映射到另一个API为Windows 8商店和Phone应用内部?这是我能想到如何突然访问这种方法的唯一方法,因为我添加了Silverlight 5作为有效目标. …