2009-10-22 40 views
2

非常简单的问题,我真的很想知道背后的原因(真正的原因)。假设你想将一个.NET应用程序分配给未安装.NET的计算机(甚至不是1.1)。为什么我们不能只包含mscorelib.dll &其他应用程序? 是不是因为CLR必须以某种方式安装才能获得用于解释IL的JIT功能?为什么.NET dll无法与应用程序一起使用“复制本地” - 因此不需要安装.NET。

我知道这是时下相当意义的问题,因为每个系统都有一个最小的.NET 2.0,但我仍然不知道:=)

+0

我不确定,但我想它与全局程序集缓存以及您提到的JIT功能有很大关系。 – 2009-10-22 13:07:44

+1

该死的,有一个不切实际的理由准备好了,所有的东西:( – 2009-10-22 13:10:22

+0

呃...我问这个问题,因为我不太确定...有一本书,我知道它有答案 - 我相信它被称为“CLR从内部使用C#”。可悲的是,从来没有找到时间来阅读它... – 2009-10-22 13:11:11

回答

1

安装库和CLR也允许共享程序集。你真的想要数百份CLR在你的机器上运行吗?我喜欢我知道某些事情可用于我的应用程序的事实。比不必担心...我是否编译1.4.5或1.4.6版本的运行时间...也许它甚至是1.2.5(JRE可以是一个痛苦)

还有很多部分.Net框架只是托管非托管API的包装器。以及您使用但不直接引用的大量其他程序集。 (请参阅mscoree.tlb和其他许多内容)

+0

是的,我认为你是对的... ... – 2009-10-22 15:17:01

5

嗯,你已经说了,单独的组件是无用的。

您需要的运行环境,包括抖动,类装载器,垃圾收集等

3

.NET是一个仅在时间interpretted的langauge。你的程序集不会编译成二进制可执行文件。

因此,您需要安装.NET运行库,以便您的代码可以在运行时解释。没有它......你的应用程序不会做任何事情。