在我试图理解引用程序集以及 CLR 如何处理这些程序集时,我对实际使用了多少不同的 .NET CLR 感到有些困惑。
查看 .NET Metro 配置文件,其中 API 由 winmd 文件投影,然后通过引用程序集在 .NET 中处理,什么版本/类型的 CLR 正在处理这个问题?
似乎这与 Silverlight 配置文件和 Windows Phone 配置文件的机制相同,因此为每个配置文件加载相同的 CLR,但仅公开相关的 API,具体取决于您的目标。
是否有意义 ?
每个平台都有一个:台式机、移动设备、手机、xbox、silverlight、微型。今年晚些时候会有另一个,ARM pad。但这并不重要,您的程序是针对参考程序集而不是 CLR 构建的。您的程序进行的所有调用都是框架方法调用,您永远不会直接调用 CLR 函数。
因此,存在存储在 c:\program files\reference 程序集中的配置文件、参考程序集的集合。它们大致沿平台边界落下,但有额外的变化。就像桌面应用程序可以针对完整、客户端或 Metro 配置文件一样。引用程序集中启用 WinRT 目标的关键功能是它可以重定向类型。这种魔法是由[TypeForwardedTo] 属性实现的。
因此,当您针对 Metro 配置文件的 .NET api 时,您的参考程序集来自Framework\.NETCore
子目录,并且您将获得对 mscorlib.dll 参考程序集的引用,该参考程序集将所有类型重定向到另一组实现 WinRT 投影的程序集。核心是 System.Runtime.dll 和 System.Runtime.WindowsRuntime.dll 等。启用可移植类库功能的相同机制。更多细节在这里。