当前位置:  开发笔记 > 编程语言 > 正文

mscorlib.dll和System.dll

如何解决《mscorlib.dll和System.dll》经验,为你挑选了4个好方法。

为什么MS最初决定维护这两个独立的核心库?也许他们考虑到了一些可伸缩性问题,但是现在我从来没有看到任何类型的应用程序都不需要这两者.有没有人有这方面的内幕消息?这不是很重要,但多年来一直在我的脑海里.

PS.我知道两个库中有什么,我知道不同之处 - 我是Reflector的忠实粉丝:)只是想知道两者的分离有什么实际用途.



1> Justin Van P..:

我在CLR/BCL团队工作,刚回答了你的电子邮件.它粘贴在下面:

Jared对Stack Overflow的回答是正确的.由于他提到的原因,mscorlib.dll与CLR紧密绑定.请注意,mscorlib.dll本身不包含任何本机代码(如Scott建议的那样),但是有很多地方需要直接调用CLR.因此,CLR和mscorlib必须一起版本化.

另一方面,System.dll没有与CLR紧密绑定(它不需要对运行时进行任何调用).我们认为System.dll位于比mscorlib.dll更高的层.将这些程序集放在两个单独的层中可以提供更大的灵活性,从而可以更轻松地将System.dll与CLR/mscorlib.dll版本分开编辑(如果我们想这样做).理论上,我们可以在不加速CLR/mscorlib版本的情况下对System.dll进行更改和添加功能.分离还使得更容易管理这些不同层中的组件之间的依赖性规则.

正如斯科特提到的那样,mscorlib似乎有很多"可选"的东西.这主要是出于历史原因,并且因为其他事情只需要一些东西.例如,System.IO.IsolatedStorage需要在mscorlib中没有技术上的原因,但在我们真正考虑这种版本控制/分层问题之前,这就是它恰好在1.0中添加的地方.此外,List位于mscorlib中,因为mscorlib中的其他代码需要基本列表集合.

从长远来看,我们希望尽可能减少mscorlib中"可选"的数量.通过从mscorlib中推出东西或创建一个新的,更核心的程序集,它只包含最小的必要类型(例如System.Object,System.Int32等),以使托管代码工作.这将使我们能够灵活地为"可选"内容添加新的创新,并且可以更轻松地创建不同的.NET Framework SKU(例如.NET客户端配置文件,Silverlight等),而无需修改运行时.

我希望这有帮助!

谢谢,贾斯汀


检查版本信息称为:"Microsoft公共语言运行时类库".但据我所知,它也是"多语言标准公共对象运行时库"的首字母缩写,它是在CLIA的EMCA标准化过程中创建的.
团队是如何决定命名程序集mscorlib的?我经常想知道ms前缀和8.3文件名.

2> Scott Wisnie..:

Mscorlib包含本机代码和托管代码.

除此之外,它还包含System.Object实现,它必须始终存在才能使一切工作.

它的区别在于CLR需要在每个托管进程中加载​​的唯一程序集.

最初,许多"可选"的东西(技术上不需要运行应用程序的东西)被放入mscorlib,因为它们很可能被所有人使用.这包括HashTable和List之类的东西.

这给了性能提升.如果每个人都想要使用某些东西,那么将它放入每个人都必须加载的程序集中是有意义的.然后你不必浪费时间去绑定一大堆不同的组件.

system.dll中的东西基本上都是没有"值得"包含在mscorlib中的东西.

然而,这种趋势开始逆转.CLR正在努力减小mscorlib的大小.例如,为Silverlight删除了很多东西(减少下载大小).

我认为他们可能会为V4(以及更高版本)做更多这类东西,但我不确定细节.



3> JaredPar..:

扩展斯科特的答案.

任何给定版本的CLR都与特定版本的mscorlib.dll高度相关.它在很多方面都是一个特殊的 DLL.CLR运行时需要某些类型/方法可用,并实现在实际代码库中定义的许多方法.通过在CLR版本和mscorlib版本之间建立牢不可破的链接,可以降低管理此关系的复杂性.


斯科特更完整.我只是碰到了他错过的一点.我投了他的票.

4> Hans Passant..:

仔细查看任何项目的References节点.你永远不会在那里找到mscorlib.dll.它很特殊,任何编译器都需要它,因为它包含使语言语法工作所需的类型.System.Array,System.Int32,System.String,System.Exception等.

你可以编写一个不依赖于System.dll的程序(虽然它很难),但你不能编写一个不依赖于mscorlib.dll的程序


是的,你可以 - 只需使用`/ nostdlib [+ | - ]`开关的`csc`
推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有