.net 如何根据支持的平台了解哪些类型可用?

.net 如何根据支持的平台了解哪些类型可用?,.net,portable-class-library,.net,Portable Class Library,我正在将我的库转换为PCL。但我不明白可用类型如何依赖于选定的平台 使用这些设置: 我的标签类型较少,因为这样的配置: 怎么可能呢? 是否有根据所选选项添加或删除类型和操作的服务 更新 据我所知,有一些命名混乱。 最初,术语可移植类库与以下平台相关:.NET Framework、Silverlight、Windows Phone和Xbox 360。至少他是这么说的 但在未来,他们添加了Windows应用商店应用程序。这里有一些奇怪的事情。 如何查找ICommand: …对于类型。IsIn

我正在将我的库转换为PCL。但我不明白可用类型如何依赖于选定的平台

使用这些设置:

我的标签类型较少,因为这样的配置:

怎么可能呢?
是否有根据所选选项添加或删除类型和操作的服务


更新

据我所知,有一些命名混乱。
最初,术语可移植类库与以下平台相关:.NET Framework、Silverlight、Windows Phone和Xbox 360。至少他是这么说的
但在未来,他们添加了Windows应用商店应用程序。这里有一些奇怪的事情。

如何查找
ICommand

…对于
类型。IsInstanceOfType()


等等!Windows应用商店在哪里?为什么这是一条单独的线?如果PCL包括Windows应用商店,WSA如何不能支持此功能

最奇怪的一点是:如果启用了.NET 4.5、SL5、WP8和WSA
Type.IsInstanceOfType()
则存在并可访问。但是如果我禁用SL5,这个方法就会消失,因为它从来没有出现过。这到底是怎么回事



这可能会有所帮助。

几个月前,Vagif Abliov在Github上发布了他的项目。此工具允许您扫描现有的.NET类库或可执行文件,并确定在特定的可移植类库配置中哪些方法可用

该工具使用Excel文件中的信息,列出所有与PCL兼容的类、方法、属性等,以及每个类在哪个框架中可用

你可以阅读更多关于Vagif的工具。如果您不想自己构建该工具,Vagif还提供了二进制文件

编辑

至于您对在目标中包括Silverlight 5时存在的
Type.IsInstanceOfType()
方法的具体关注,而如果您省略SL5,则缺少该方法,我没有任何明确的答案。我只能观察到,SL5的组合被标识为PCL配置文件158,与Visual Studio 2010兼容,而没有SL5的组合被标识为PCL配置文件78,与VS 2010不兼容。出于某种原因,
Type.IsInstanceOfType()
必须从配置文件78中删除。另一方面,此配置文件似乎支持许多其他功能;您可能希望查看这些文件夹的相应内容,以便更好地了解各个概要文件支持哪些程序集:

  • C:\Program Files(x86)\Reference Assembly\Microsoft\Framework.NETPortable\v4.5\Profile\Profile78
  • C:\Program Files(x86)\Reference Assembly\Microsoft\Framework.NETPortable\v4.0\Profile\Profile158

我一下子想不出替换
类型的实现是什么样子的。IsInstanceOfType()
,但我想,找到一个应该不会太难。

几个月前,Vagif Abliov在Github上发布了他的项目。此工具允许您扫描现有的.NET类库或可执行文件,并确定在特定的可移植类库配置中哪些方法可用

该工具使用Excel文件中的信息,列出所有与PCL兼容的类、方法、属性等,以及每个类在哪个框架中可用

你可以阅读更多关于Vagif的工具。如果您不想自己构建该工具,Vagif还提供了二进制文件

编辑

至于您对在目标中包括Silverlight 5时存在的
Type.IsInstanceOfType()
方法的具体关注,而如果您省略SL5,则缺少该方法,我没有任何明确的答案。我只能观察到,SL5的组合被标识为PCL配置文件158,与Visual Studio 2010兼容,而没有SL5的组合被标识为PCL配置文件78,与VS 2010不兼容。出于某种原因,
Type.IsInstanceOfType()
必须从配置文件78中删除。另一方面,此配置文件似乎支持许多其他功能;您可能希望查看这些文件夹的相应内容,以便更好地了解各个概要文件支持哪些程序集:

  • C:\Program Files(x86)\Reference Assembly\Microsoft\Framework.NETPortable\v4.5\Profile\Profile78
  • C:\Program Files(x86)\Reference Assembly\Microsoft\Framework.NETPortable\v4.0\Profile\Profile158

我一下子想不出替换
类型的实现是什么样子的。IsInstanceOfType()
,但我认为,要想找到一个这样的替代实现应该不会太难。

首先要做的事情,仅仅是因为在portable中提供了一些东西,并不能使它在所有支持portable的平台上都可用。例如,当针对Silverlight和.NET Framework时,MEF(System.ComponentModel.Composition.dll)是可用的,但将Windows应用商店或电话添加到目标平台时,它会消失,因为这些平台不支持它

但是,在这里,您在上面看到的是遗留曲面和新曲面之间的泄漏抽象,如本页所述:

在新表面积中,System.Reflection表面积(包括System.Type)已从旧表面积更改。某些功能已被更改、移动或完全删除。类型上的大多数成员已被类型信息上的功能替换。通过添加using语句“using System.Reflection”,然后调用GetTypeInfo,可以从Type->TypeInfo开始

如果Windows应用商店没有旧的API,为什么在某些情况下,当包含Windows应用商店时,它会以便携方式显示? Windows应用商店“隐式”