Silverlight 2 包含一个 CLR,但并不是其他 .NET 应用程序和程序集使用的 CLR. Silverlight CLR 也称为 CoreCLR,在设计时充分考虑了不同用途。CoreCLR 专为跨平台互操作性而设计,可与 CLR 同时运行并支持不同的安全模型以及不同版本的基础类库。
CoreCLR 是 Silverlight 使用的虚拟机。它类似于为 .NET Framework 2.0 及更高版本提供强大功能的 CLR,也包含相似的类型加载和垃圾收集 (GC) 系统。
CoreCLR 采用非常简单的代码访问安全性 (CAS) 模型——它比桌面 CLR 更简单,Silverlight 只需要在应用程序级别强制实施安全策略。这是因为作为独立于平台的 Web 客户端,它不能依靠任何特殊的现行企业或机器策略,而且也不应该允许用户更改现有策略。但也有一些例外情况,比如 OpenFileDialog 和 IsolatedStorage(存储配额更改),在这种情况下,Silverlight 需要用户的明确同意才能打破沙箱的默认规则集。OpenFileDialog 用于访问文件系统,而 IsolatedStorage 的作用是访问名义上隔离的存储并提高存储配额。
Silverlight 和 .NET 应用程序使用不同 CLR 意味着您不能在两个针对 .NET 应用程序和 Silverlight 应用程序的项目中引用同一个程序集。主要问题出在 mscorlib 程序集上。Silverlight 正常使用所需的功能集非常小-仅仅是内核。但任何 .NET 程序集都要链接标准版本的 mscorlib,这就是问题所在。
MSDN杂志上有两篇文章详细的讨论了CoreCLR:
使用 CoreCLR 编写Silverlight:http://msdn.microsoft.com/magazine/cc721609
Silverlight 2 中的安全性:http://msdn.microsoft.com/magazine/cc765416