为什么MS最初作出的决定保持这两个独立的核心库?也许他们有一定的可扩展性问题中心,但今天我从来没有看到应用程序,任何类型的,不需要两个。没有任何人有任何内部的信息?这不是真的重要,但是一直在我心中对于年。

PS。我知道是什么在两个库,我知道-我是个大风扇 反射器 :)只是想知道什么实际用途的分离的两个。

有帮助吗?

解决方案

Mscorlib不包含这两个机和管理的代码。

除其他事项外,它含有该系统。目执行情况,这必须始终存在为一切工作。

它有区别的,只会CLR需要加载内的每一个管理进程。

最初,很多的"可选"的东西(事情,在技术上不需要运行一个应用程序)投入mscorlib因为他们的东西被高度可能使用的每一个人。这包括HashTable和列表。

这给了一个性能的提升。如果每个人都会想要用的东西,然后很有意义,把它内部的组件,每个人都要负荷。然后你不必浪费时间去和结合一大堆不同的组件。

东西在system.dll 基本上就是一切,不是"值得的"被包括在mscorlib.

这一趋势,然而,正在开始得到扭转。CLR是努力减小mscorlib.很多东西是删除多例子(减少下载大小)。

我认为他们可能会做更多这样的东西为V4(和以后的版本)但是我不确定有关细节。

其他提示

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

  

Jared对Stack Overflow的回答是   就在。 mscorlib.dll很紧   因为他的原因而绑定到CLR   提及。请注意mscorlib.dll   本身不包含任何本机代码   (正如斯科特建议的那样),但有   很多需要打电话的地方   直接进入CLR。就这样,   必须对CLR和mscorlib进行版本控制   在一起。

     另一方面,

System.dll不是   紧紧地绑定到CLR(它没有   需要对运行时的任何调用)。   我们认为System.dll位于   比mscorlib.dll更高的层。   将这些组件分成两部分   单独的图层允许更多   灵活性,使其更容易   版本System.dll与。分开   CLR / mscorlib.dll版本(如果我们想要的话)   这样做)。从理论上讲,我们可以做到   更改并添加功能   System.dll没有加速   CLR / mscorlib版本。分离   也使管理更容易   组件之间的依赖规则   这些不同的层次。

     

正如斯科特提到的那样,看起来确实如此   有很多“可选的”东西   mscorlib程序。这主要是为了   历史原因和一些原因   其他东西只需要东西   的东西。例如,没有   技术原因   System.IO.IsolatedStorage需要   在mscorlib,但这就是它的位置   碰巧在我们之前加入了1.0   真的想过这样的   版本控制/分层问题。也,   列表在mscorlib中,因为其他   mscorlib中的代码需要a   基本清单集。

     

长期来看,我们希望减少   “可选的”量在mscorlib中的东西   越多越好。或者通过   推出mscorlib或   创建一个新的,更核心的程序集   只包含最低限度   必要的类型(例如System.Object,   System.Int32等)进行托管   代码工作。这会给我们带来的   灵活地添加新的创新   “可选的”东西,并使它   更容易创建不同的.NET   框架SKU(例如.NET客户端   配置文件,Silverlight等),没有   必须改变运行时间。

我希望这有帮助!

谢谢, 贾斯汀

扩大斯科特的答案。

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

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

您可以编写一个不依赖于System.dll的程序(尽管它很难),但是您不能编写一个不依赖于mscorlib.dll的程序

提到的原生/管理的事情听起来似乎有道理,但我仍然不完全相信。在任何情况下,MS似乎都将mscorlib.dll视为系统所需的核心库,而System.dll包含程序员的核心功能 - 这听起来也不错。

我刚刚将同样的问题通过电子邮件发送给了BCL团队。如果任何人可以回答...当(如果?)我收到答案时,我会在这里发布。谢谢你到目前为止的答案!

这只是猜测,但mscorlib.dll可能还有一些对CLR运行时很重要的C代码,以及.NET程序集或某些混合模式代码。 System.dll可能都是托管的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top