当时,Visual Studio开发团队的Jason Zander回答了他对这个话题的看法,认为这个话题有些无关紧要 - 修复运行时的安全问题(以及其他问题)是他们的主要关注点。总体而言,小的额外开销是值得的。
快进到2009年。现在有一些团队声称拥有C#链接器。(甚至Jason Zander自己也说过实现一个链接器不需要太多努力。)与.NET 1.0可爱的几十兆下载相比,我们现在有一个巨大的200-300 mb跨平台完整的.NET 3.5安装程序,其中包含x86、x64和ia64版本的.NET。微软减少运行时大小的建议包括:
- 解压可再分发文件,删除不需要的目标平台,然后重新组合
- 使用仅下载适用于您平台的库的Web引导程序
- 使用Client Profile安装程序(2008年底推出),其中包含有限的库,并且仅适用于x86
更糟糕的是,据我所知(如果我错了,请纠正我),客户端框架甚至不会在Windows中注册为已安装.NET 3.5。这意味着如果计算机上安装了多个.NET 3.5客户端应用程序,则没有一个应用程序会看到彼此,并且运行时将一遍又一遍地重新安装!
我真的不知道微软在想什么。即使假设最坏的情况是针对一个目标平台(例如,x64),并且只需要包括那些库,您仍然需要在您的应用程序上增加高达60 mb的开销。即使是最著名的.NET应用程序之一Paint.NET,也因为庞大的.NET依赖关系而安装应用程序存在困难。如果他们在分发免费应用程序方面存在问题,那么其他国家怎么办?最终,他们必须制作一个引导程序,在安装自己的应用程序之前安装Microsoft Installer 3.1,.NET运行时引导程序和所有其他依赖库。
那么怎么样呢?链接器。有没有好用的链接器,或者一个工具使得构建C#应用程序不需要用户安装庞大的.NET运行时?
更新:看起来有几个选择:
Mono:
- Mono 有自己的链接器。从下面的答案来看,它似乎运行得很好。
.NET:
- Xenocode 似乎是可用且有效的一个。
- Thinstall 是另一个被推荐的,由VMware提供。
- Remotesoft提供了另一个链接器。他们将其标榜为“混淆器”。有什么想法吗?
- Rustemsoft提供了一个名为Skater .NET混淆器的链接器。有人熟悉他们吗?
- Microsoft的ILmerge也被建议;这似乎只执行任务的一部分(即合并库,而不是剥离未使用的部分)。
看起来Mono工具正在被使用,那.NET基础的工具呢?你有没有其他经验?或者我们只能等待微软将其推送给所有人使用3.5版本?我不敢想象等待.NET 4.0发布需要多长时间...