Reflection 如何从使用反射API的可移植类库中定位Silverlight?

Reflection 如何从使用反射API的可移植类库中定位Silverlight?,reflection,silverlight-5.0,portable-class-library,Reflection,Silverlight 5.0,Portable Class Library,我有一个针对WSA、NET45和WP8的可移植类库,我还希望针对SL5。愚蠢的是99%的库代码都是SL兼容的,但在有些地方我调用反射API来检索类型属性或字段: var fields = myType.GetTypeInfo().DeclaredFields; 不幸的是,GetTypeInfo在SL5中不可用,因此上面的代码无法编译。所以我基本上有三种选择: 不要以PCL中的SL5为目标,因此我需要为Silverlight保留一个单独的库 从使用反射的PCL代码中提取,因此PCL需要在开始时解

我有一个针对WSA、NET45和WP8的可移植类库,我还希望针对SL5。愚蠢的是99%的库代码都是SL兼容的,但在有些地方我调用反射API来检索类型属性或字段:

var fields = myType.GetTypeInfo().DeclaredFields;
不幸的是,GetTypeInfo在SL5中不可用,因此上面的代码无法编译。所以我基本上有三种选择:

  • 不要以PCL中的SL5为目标,因此我需要为Silverlight保留一个单独的库
  • 从使用反射的PCL代码中提取,因此PCL需要在开始时解决此依赖关系
  • 在运行时做一些聪明的事情,这样PCL就可以检测出哪些方法可用并调用适当的方法
  • 选项1是可以的,但我宁愿找到一个替代方案来维护一个重复的库。 如果我必须提取一大块功能,那么选项2就可以了,这样就值得引入bootstraper。当有几行代码没有编译时,拖动DI/IoC是愚蠢的

    因此,如果可能的话,我在考虑选项3时没有明确的理解。反射是我的朋友,但我正在努力克服反射API不匹配的问题


    建议/经验分享非常感谢。

    在使用代码后,我突然想到,我可以简单地使用旧的检索字段的方法:

    var fields = myType.GetFields(BindingFlags.Public | BindingFlags.Static);
    
    我的印象是,由于反射API的改变,这种语法在PCL中是不可用的,但事实上恰恰相反:使用这种语法,我可以针对WSA、WP8和SL5的.NET 4.0.3、.NET 4.5、.NET这两个方面

    Reflection.Assembly = Reflection.IntrospectionExtensions.GetTypeInfo(GetType(*anyTypeInAssembly*)).Assembly
    

    这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时在自己的帖子上发表评论,一旦有足够的评论,您就可以发表评论了。问题是GetTypeInfo作为类型的直接方法不可用。另一种方法是Reflection.IntrospectionExtensions.GetTypeInfo(type)。