silverlight - Silverlight 程序集与 "normal".NET 程序集二进制不兼容的原因

标签 silverlight

Silverlight 程序集与“普通”.NET 程序集二进制不兼容。考虑到相同的编译器用于创建两种类型的程序集(即使 Silverlight 没有引用 mscorlib.dll),这怎么可能?

最佳答案

对,所以,好问题。
在这方面存在很多误解,将事实与虚构区分开来很重要。

小说: Silverlight 程序集由神奇的 microsoft gnome 编译,这使得它们无法与 .Net 桌面 CLR 兼容。

事实: CLR 有这个精美的系统,称为“Fusion”。
每个程序集都有一个作为 DLL/EXE 一部分嵌入的程序集 list 。
程序集 list 包含一堆东西(嵌入资源的名称、类型系统信息等)以及此程序集所需的其他程序集。

Fusion 是 CLR 的一部分,负责获取该 Assembly Manifest 依赖项并查找相应的物理文件。

桌面 .Net CLR 上 Silverlight 程序集的 Fusion - 可以正常工作。 (假设所有依赖项都存在)

用于桌面程序集的 Silverlight CLR 上的 Fusion - 不起作用。
主要是因为 .Net BCL(基类库)DLL 不存在。如前所述,它是不同的 mscorlib.dll、agcorlib.dll、System.dll、System.Windows.dll 等。
这些 DLL 不同的原因主要是安全性。普通的 BCL 会使用指针、特定于平台的 p/invokes、文件、注册表等各种讨厌的东西。我们不能只运行浏览器。

所以,总结一下:
Silverlight 组件 --> 在桌面 CLR 上运行 == 有效
桌面程序集 --> 在 Silverlight CLR 上运行 == 不起作用

如果您想要在桌面 CLR 上运行的 Silverlight 程序集的真实示例,请查看我一年前的文章 @ SILVERLIGHT DLLS ON THE DESKTOP CLR

关于silverlight - Silverlight 程序集与 "normal".NET 程序集二进制不兼容的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1741936/

相关文章:

silverlight - System.ExecutionEngineException PropertyChanged

c# - 如果第一个在 Silverlight 中为 null,则绑定(bind)到第二个属性

asp.net - 在 IIS 上托管 WCF Web 服务 - 在 VS 中工作,但在 IIS 中不工作

silverlight - 使用 Silverlight 进行渐进增强

xaml - 如何了解 XAML 设计器中的事件控件?

c# - 在 Silverlight 项目中引用 .Web 项目时出现问题

wpf - 在 XAML 中从菱形的偏斜因子创建偏斜 AngleY

c# - silverlight 绑定(bind)到自定义控件中的依赖项属性

Silverlight Prism 事件聚合器不可靠

visual-studio - 如何在 Visual Studio 中使用 IE 启动 Silverlight,同时 Google Chrome 保持默认进行常规浏览