Silverlight 2 确实包含一个 CLR,但并不是其他 .NET 应用程序和程序集使用的 CLR。Silverlight CLR 也称为 CoreCLR,在设计时充分考虑了不同用途。CoreCLR 专为跨平台互操作性而设计,可与 CLR 同时运行并支持不同的安全模型以及不同版本的基础类库。2008 年 8 月的出色专栏《CLR 全面透彻解析》中对此进行了详细说明(请参阅 msdn.microsoft.com/magazine/cc721609)。
Silverlight 和 .NET 应用程序使用不同 CLR 意味着您不能在两个针对 .NET 应用程序和 Silverlight 应用程序的项目中引用同一个程序集。主要问题出在 mscorlib 程序集上。Silverlight 正常使用所需的功能集非常小-仅仅是内核。但任何 .NET 程序集都要链接标准版本的 mscorlib,这就是问题所在。
在本专栏所讨论的示例应用程序中,我利用一个接口来共享 Windows Presentation Foundation 应用程序与 Silverlight 应用程序。唯一的解决方法是在两项目之间复制 C# 及接口定义,因为您没有共同引用的程序集,因此在 .NET Framework 版本中,有必要将标准 mscorlib 程序集内的功能分成两部分:内核事务和桌面事务,以便为 Silverlight 和 .NET 程序集之间的二进制兼容性奠定基础。