我正在考虑将一个项目迁移到托管代码,但我听说.NET运行时非常庞大--实际上,它比我的可执行二进制文件大几倍。在我看来,这就像是尾巴在摇狗。但我也被告知,一些CLR实现是模块化的,您可以为它们创建一个自定义的发行版,只包含您实际需要的部分。
问题是,我很难在谷歌上找到答案,这本应是非常简单的问题。在不同的实现上,完整的CLR包有多大,哪些支持这种模块化分发能力,对于一个标准的windows风格(基于表单)的应用程序,运行时最终会有多大,因为它不会使用大量的.NET花哨?(我最感兴趣的是Assembly系统固有的轻松创建插件的能力,以及通过JIT编译将脚本构建到我的程序中的能力。)
编辑:我对安装程序的大小或下载时间不感兴趣。我想知道实际框架的大小,未压缩的,可以运行的,因为它将在最终用户的系统上运行。
发布于 2008-11-03 19:15:43
你可能会发现这个网站很有趣。
http://www.hanselman.com/smallestdotnet/
发布于 2008-11-03 19:27:07
通常,您不应该担心大小,因为大多数连接到Internet的计算机都具有正版Microsoft Windows,并且设置为检索自动更新,因此应该安装该框架。可以肯定的是,我推荐你2.0版,因为它似乎是最受欢迎的。此外,请记住,还有一个称为"client profile“的较小版本(子集)的.net框架。
还要考虑这一点:如果你正在使用任何外部库(即MFC/ATL/VB运行时)?如果包含了这些依赖项,您的应用程序可能会达到与.net框架相同的大小,甚至更大。
事实上,较旧的系统( 2000年前的SP4)会有问题,但这取决于您的目标客户以及最终的目标。
稍后编辑:您可以将应用程序的安装程序设置为自动下载所需的依赖项(应用程序所需的版本),还可以使用ClickOnce技术从网站(通过提供更新)相对轻松地部署和维护应用程序。
发布于 2008-11-03 20:39:12
我看到你想要的是“安装时使用的磁盘”而不是“下载大小”。这并不是一个特别有用的东西来衡量,答案是“你基本上不能说”,但为了有趣,这里是我的数据:
在我的windows目录中,在我的windows vista PC上的Microsoft.NET\Framework目录(所有框架都在这里)中,我有以下目录:
但是请注意,我实际上并没有安装这些框架。Vista可能只是为了兼容性而使用了一些别名。你永远不会使用这些版本进行开发,因为它们已经过时了(与较新的版本相比,它们是垃圾)
现在,这里是有趣的地方。
在C:\Windows\assembly中还有“全局程序集缓存”,它在我的PC上运行到530MB,但其中一些文件是硬链接到其他目录中的,所以它们不计入。
然而,这是误导性的,因为3.0和3.5“在”2.0之上“运行,你不能单独拥有它们。
这是原始数据,但并不像只看数字那么简单。
Microsoft Visual J# 2.0 Redistributable Package,它是安装visual studio的一部分,除非你使用J#,否则在客户端PC上是不需要的。除了所有dll的调试副本之外,还有XML文档文件,这些文件在directoryVista中总共69MB已经有了v2.0和v3.0目录,而且他们的v2.0目录会小得多,除非他们还安装了.NET 3.5。因此,除非你的目标是Vista3.5,否则在.NET上的“部署成本”是零。
对于一些更真实的“客户端”数据,我有一台Windows XP SP2 PC,它只安装了基本的.NET 2.0。下面是上面的数字:
,它并不是很大
我记得前段时间在winXP上看到过.NET 2.0的“需要130兆字节”,听起来差不多。
现在,这听起来似乎很多,但这里有一些数据可以与之对比:
VC++ 2008的基本动态链接库(vc,mfc,atl)是10兆,它们在特性方面给你的东西很少。当您构建一个具有任何像样的特性集的C++应用程序时,根据我的经验,您将看到大约4-5兆的可执行文件和动态链接库。相比之下,我不久前开发的一个功能类似的.NET应用程序有800k的动态链接库和可执行文件,其中大部分都是嵌入式图标和位图。
如今,在.NET运行时开始成为赢家之前,它不需要那么多的应用程序。
https://stackoverflow.com/questions/259613
复制相似问题