这里的很多人可能都熟悉Joel Spolsky最受欢迎的博客文章之一,请主席先生,我可以有一个链接器,在那里他呼吁一种方法来删除.NET框架的依赖关系,这样就可以开发一个独立的应用程序,出售.
Visual Studio开发团队的Jason Zander当时回答了他对这个主题的看法,认为这个话题有点没有意义 - 在运行时(以及其他方面)修复安全问题的能力是他们的主要关注点.总的来说,小开销是值得的.
快进到2009年.现在有几个团体声称拥有C#链接器.(Jason Zander甚至自己说实现它不会花太多时间.)我们现在拥有一个庞大的200-300 mb跨平台完整的.NET 3.5安装程序,而不是可爱的,十几个下载的.NET 1.0.包含用于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有自己的链接器.从下面的答案看,它看起来很好.
.净:
Xenocode似乎是可用的和可用的.
Thinstall是推荐的另一个,它是由VMware提供的.
Remotesoft还有另一个链接器.他们称它为"混淆器".有什么想法?
Rustemsoft发现另一个名为Skater .NET Obfuscator的人.有人熟悉他们吗?
还提出了Microsoft的ILmerge ; 这看起来它只执行部分任务(即合并库,而不是剥离未使用的位).
看起来Mono工具正在使用; 基于.NET的工具怎么样?与他们有任何其他经验,或者我们只是要等待微软将其推向每个人?我不禁想到将.NET 4.0推出需要多长时间......
在的情况下,单链接.
我不能谈论这里列出的其他软件,但作为Mono Linker的作者,我可以告诉它它做了什么,它做了什么.
Mono Linker只是一个托管链接器,因此根据定义,它需要程序集,并删除程序运行所不需要的东西.它不会将所有程序集合并在一起,并且它不会使用本机程序.
有一个ILMerge的Mono.Merge克隆,但它不完整,它的作者没有维护它.为了生成包含Mono运行时和程序集的本机程序,Mono提供了mkbundle工具.
此外,因为它只是一个托管工具,它正在改变程序集,如果你给它强大的命名程序集,并且你没有私钥来签名它们,你将遇到运行这些程序集的麻烦.
我写了一些关于链接器的博客文章:
链接器的演示文稿
链接器和mkbundle的组合使用
关于我们与Linker的经验.Linker目前用于Mono项目的两个部分.它用于生成我们分发的程序集,供人们嵌入我们的C#编译器Mono.CSharp.dll.您可以在PDC上观看Miguel的演示,其中介绍了我们如何做到这一点.它非常简单,它是Linker的一个基本用法,它是一个可自定义的工具,并且很容易为它编写自定义步骤.
Linker的更复杂用途是我们创建月光组件的方式.Moonlight是我们Silverlight的实现,程序集是桌面程序集的子集.因此,我们链接桌面组件以减小其大小,并使用自定义步骤,我们正在转换公共API以匹配Silverlight.
所以,是的,链接器有一些相当粗糙的边缘,例如命令行界面,或者你必须真正知道你在做什么,或者你可能最终得到一些奇怪的组件,但总而言之,它对我们来说真的很好.
FWIW
Mono已经有很长一段时间了.
下面是一个例子如何使用mkbundle.
http://www.xenocode.com/
这就是我们使用的.到目前为止,经过一年或有限的使用(可能在野外安装500次),零问题.
它的价格相当合理.他们有一些更昂贵的完整虚拟化软件(将您的应用程序与其他应用程序捆绑在一起,甚至是O/S).但我们并不需要所有这些.我们大约一年前的成本是400美元.我认为它现在有点贵,但比Thinstall少得多.
他们有很棒的演示,你可以下载,如IE 8.无需安装.