这里的许多人可能都熟悉Joel Spolsky最受欢迎的博客文章之一,请问先生,我可以有一个链接器吗,他在那儿大声疾呼,希望删除对.NET框架的依赖,以便开发独立的应用程序并出售。
当时,Visual Studio开发团队的Jason Zander回答了他对该主题的看法,认为该主题有些争议-他们主要关心的是在运行时(尤其是其中)解决安全问题的能力。总的来说,少量的开销是值得的。
快进到2009年。现在有几个小组声称拥有C#链接器。(Jason Zander甚至对自己说过,实现一个应用程序并不需要太多。)而不是.NET 1.0这么可爱的十几个meg下载,我们现在有了一个庞大的200-300 mb跨平台的完整.NET 3.5安装程序。包含适用于x86,x64和ia64的.NET版本。Microsoft减少运行时大小的建议包括:
- 解包可再发行组件,删除不需要的目标平台,然后重新组合在一起
- 使用仅为您的平台下载库的Web引导程序
- 使用客户端配置文件安装程序(2008年末新增),该安装程序库有限,仅适用于x86
更糟糕的是,据我了解(如果我错了,请纠正我),客户端配置文件甚至没有在Windows上注册为已安装.NET 3.5。这意味着,如果计算机上安装了多个.NET 3.5客户端应用程序,则彼此之间将不会看到对方,并且将一次又一次地重新安装运行时!
我真的不知道微软在这里想什么。即使假设最坏的情况是针对一个目标平台(例如x64)进行安装,并且只需要包括那些库,您仍然会在应用程序上看到60 mb以上的开销。即使是最著名的.NET应用程序之一,Paint.NET,也由于庞大的.NET依赖关系而难以安装应用程序。 如果他们在分发免费应用程序时遇到问题,那么世界其他地方呢?最后,他们必须制作一个引导程序,该引导程序安装了Microsoft Installer 3.1,.NET运行时引导程序以及所有其他从属库然后才能安装自己的应用程序。
那呢 链接器。是否存在任何良好的应用程序-还是仅一种工具就可以构建C#应用程序而无需用户安装大量的.NET运行时?
更新:因此,看起来有两个选择:
单核细胞增多症:
- Mono有其自己的链接器。从下面的答案看来,它工作得很好。
。净:
- 异码似乎是一种可用且有效的工具。
- 卸载推荐使用,它是VMware推荐的。
- Remotesoft还有另一个链接器。他们称其为“混淆器”。有什么想法吗?
- 由Rustemsoft找到了另一个名为Skater .NET Obfuscator的文件。有人熟悉他们吗?
- 还提出了微软的ILmerge ; 看起来它只执行部分任务(即合并库,而不剥离未使用的位)。
看来Mono工具正在使用;基于.NET的工具呢?他们还有其他经验吗,还是我们只需要等待Microsoft向所有人推出3.5版本?我不禁思索要推出.NET 4.0需要多长时间...