在我尝试理解引用程序集以及CLR如何处理这些程序集的过程中,我对有多less种不同的.NET CLR实际上处于困惑之中感到困惑。
查看.NET Metroconfiguration文件,其中API由winmd文件投影,稍后由.NET通过引用程序集处理,CLR正在处理的是哪种版本?
看起来,这与Silverlightconfiguration文件和Windows Phoneconfiguration文件的机制是一样的,所以同样的CLR被加载,但只是暴露相关的API,具体取决于你的目标。
是否有意义 ?
每个平台都有一个平台:桌面,手机,手机,Xbox,silverlight,micro。 而今年晚些时候还会有另外一个ARM垫。 但是这不是什么重要的事情,你的程序建立在引用程序集上,而不是CLR上。 你的程序所做的所有调用都是框架方法调用,你从不直接调用CLR函数。
因此,有配置文件 ,存储在c:\ program files \ reference程序集中的引用程序集的集合。 它们大致沿着平台边界下降,但还有其他变化。 就像一个桌面应用程序可以定位完整,客户端或城域配置文件。 启用WinRT定位的引用程序集中的关键功能是可以重定向类型。 这个魔法是由[TypeForwardedTo]属性实现的 。
因此,当您将Metro api作为目标时,您的引用程序集来自Framework\.NETCore
子目录,并且您将引用mscorlib.dll引用程序集,将所有类型重定向到另一组实现WinRT投影。 核心是System.Runtime.dll和System.Runtime.WindowsRuntime.dll等。 相同的机制,使便携式类库功能。 更多细节在这里 。