在我尝试理解引用程序集以及CLR如何处理它们时,我对实际有多少不同的.NET CLR感到有些困惑。
查看.NET Metro配置文件,其中API由winmd文件投影,稍后通过引用程序集在.NET中处理,CLR的哪个版本/种类正在处理这个问题?
它似乎与Silverlight配置文件和Windows Phone配置文件的机制相同,因此为每个配置的CLR都会加载相同的CLR,但只会公开相关的API,具体取决于您的目标。
有意义吗?
答案 0 :(得分:5)
每个平台都有一个:桌面,移动,手机,xbox,silverlight,micro。今年晚些时候将会有另一个,ARM垫。但这并不重要,您的程序是根据参考程序集构建的,而不是CLR。你的程序所做的所有调用都是框架方法调用,你永远不会直接调用CLR函数。
所以有 profiles ,存储在c:\ program files \ reference程序集中的引用程序集集合。它们大致沿平台边界下降,但有其他变化。就像桌面应用程序可以定位完整,客户端或城域配置文件。启用WinRT定位的参考装配中的关键功能是它可以重定向类型。这种魔力是由[TypeForwardedTo] attribute实现的。
因此,当您为Metro配置文件定位.NET api时,您的引用程序集来自Framework\.NETCore
子目录,您将引用mscorlib.dll引用程序集,将所有类型重定向到另一个实现WinRT投影的程序集。核心的是System.Runtime.dll和System.Runtime.WindowsRuntime.dll等。启用可移植类库功能的相同机制。更多详情here。