2

我正在考虑将一个项目迁移到托管代码,但我听说 .NET 运行时非常庞大——实际上比我的可执行二进制文件大几倍。在我看来,这就像尾巴在摇狗。但我也被告知,一些 CLR 实现,例如 Mono,是模块化的,您可以为它们创建一个自定义分发,只包含您实际需要的部分。

问题是,我在谷歌上找到关于这个应该非常简单的问题的答案非常困难。各种实现的完整 CLR 包有多大,哪些支持这种模块化分发能力,以及运行时对于不使用大量 .NET 铃声的标准 Windows 样式(基于表单)应用程序最终会有多大和口哨?(我最感兴趣的是组装系统固有的轻松创建插件的能力,以及通过 JIT 编译将脚本构建到我的程序中的能力。)

编辑:我对安装程序大小或下载时间不感兴趣。我想知道实际框架的大小,未压缩并准备好运行,因为它将在最终用户的系统上。

4

7 回答 7

2

你可能会觉得这个网站很有趣。

http://www.hanselman.com/smallestdotnet/

于 2008-11-03T19:15:42.543 回答
1

通常,您不必担心大小,因为大多数具有正版 Microsoft Windows 并设置为检索自动更新的 Internet 连接计算机都应该安装框架。可以肯定的是,我会向您推荐 2.0 版,因为它似乎是最受欢迎的。另外,请记住,.net 框架有一个较小的版本(子集),称为“客户端配置文件”。

还要考虑一下:如果您使用任何外部库(即 MFC/ATL/VB 运行时)?如果你是,包含这些依赖项,你的应用程序可能会达到与 .net 框架相同的大小,如果不是更大的话。

确实,旧系统(2000 SP4 之前)会出现问题,但这取决于您的目标客户,最后取决于您的目标。

稍后编辑:您可以将应用程序的安装程序设置为自动下载所需的依赖项(您的应用程序所需的版本),并且您可以使用该ClickOnce技术从网站上相对容易地部署和维护您的应用程序(通过提供更新)。

于 2008-11-03T19:27:06.717 回答
1

我看到您想要“安装时使用的磁盘”而不是“下载大小”。这不是一个特别有用的衡量标准,答案是“你基本上看不出来”,但为了感兴趣,这是我的数据:

查看我的 windows 目录,在Microsoft.NET\Framework我的 windows vista PC 上的目录(这是所有框架所在的位置)中,我有以下目录:

  • v1.0.3705:400 k
  • v1.1.4322:493 字节

但是请注意,我实际上并没有安装这些框架。为了兼容性,Vista 可能只是有一些别名。无论如何,您永远都不会使用这些版本进行开发,因为它们已经过时(与较新的东西相比,它们是废话)

现在这就是有趣的地方。

  • “框架”目录本身有 356 k 的文件
  • v2.0.50727:152 MB
  • v3.0:10.5 MB
  • v3.5:24.7 MB

中还有“全局程序集缓存” C:\Windows\assembly,在我的 PC 上运行到 530 MB,但其中一些文件硬链接到其他目录,所以它们不计算在内。

然而,这具有误导性,因为 3.0 和 3.5 “在” 2.0 之上运行,您不能单独拥有它们。

那是原始数据,但并不像只看数字那么简单。

  1. 我安装了 Visual Studio 2005 和 2008。这让我获得了数百 MB 的调试 dll。

  2. 这也是Microsoft Visual J# 2.0 Redistributable Package安装 Visual Studio 的一部分,在客户端 PC 上不需要,除非您使用没有人使用过的 J#。那是 7 MB

  3. 除了所有 dll 的调试副本外,还有 XML 文档文件,在 framework\v2.0 目录中总共有 69 MB

  4. 任何拥有Vista 的人都已经拥有v2.0 和v3.0 目录,而且他们的v2.0 目录会小很多,除非他们还安装了.NET 3.5。除非您专门针对 .NET 3.5,否则 Vista 上的“部署成本”因此为零。

对于一些更真实的“客户端”数据,我有一台 Windows XP SP2 PC,只安装了基本的 .NET 2.0。这是上面的数字:

  • Windows\Microsoft.NET\Framework\v2.0.50727:64 MB
  • Windows\assembly:92 MB(注意,由于硬链接,它并没有这么大)

我记得前段时间在 winXP 上看到 .NET 2.0 需要 130 兆字节,这听起来很对。

现在,这听起来很多,但这里有一些数据可以与之对比:

VC++ 2008 基础 dll(vc、mfc、atl)为 10 meg,它们提供的功能很少。当您构建具有任何不错的功能集的 C++ 应用程序时,根据我的经验,您正在查看大约 4 到 5 兆的可执行文件和 dll 的交付。相比之下,我不久前构建的一个功能相当的 .NET 应用程序有 800k 的 dll 和可执行文件,其中大部分被嵌入的图标和位图占用。

如今,在 .NET 运行时开始大获全胜之前,它不需要那么多应用程序。

于 2008-11-03T20:39:11.720 回答
0

Scott Hanselman 有一篇关于各种 .NET 发行版的大小以及这些对软件发行版的影响的有用博客文章。

于 2008-11-03T19:16:55.287 回答
0

安装框架时会安装 CLR 运行时。如果我没记错的话,.NET 2.o 的安装程序大小约为 35-40Mb。我不确定 3.0 和 3.5,您可以查看 Microsoft 下载来了解一下。

已经安装框架变得越来越普遍,并且由于它是其他应用程序使用的服务,因此许多人通常不认为它是您的应用程序足迹的一部分。

我不知道 Microsoft 版本有什么方法可以使其“模块化”

于 2008-11-03T19:19:24.003 回答
0

您必须意识到,每种语言都需要某种 CLR。即使它是 C/C++,它也取决于操作系统内置的那个。Java 的版本是 JVM,当然还有 .NET 版本。如果您真的担心大小,有人链接了最小的 .NET,这是一个好的开始。

请记住,大多数人至少已经安装了 .NET1.0,除非可移植性对您来说非常重要,否则最好只说明 .NET 框架是一个依赖项。

于 2008-11-03T19:24:59.093 回答
0

您可以查看的路线是转换为 C++ 的工具,例如http://www.codeplex.com/crossnet。功能本身并不完整或完美,但可以让您进行更高级别的编程,然后可以自由地成为 .Net 自由。

于 2008-11-03T19:30:00.003 回答