当前位置:  开发笔记 > 编程语言 > 正文

适用于.NET应用程序的连接器状态(又名"请先生,我可以拥有链接器"2009版)

如何解决《适用于.NET应用程序的连接器状态(又名"请先生,我可以拥有链接器"2009版)》经验,为你挑选了3个好方法。

这里的很多人可能都熟悉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推出需要多长时间......



1> Jb Evain..:

在的情况下,单链接.

我不能谈论这里列出的其他软件,但作为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.

所以,是的,链接器有一些相当粗糙的边缘,例如命令行界面,或者你必须真正知道你在做什么,或者你可能最终得到一些奇怪的组件,但总而言之,它对我们来说真的很好.


冷却+编写单声道链接器+10
马修:嗯,不是真的.链接器在MonoTouch中用于减小最终应用程序的大小.它是AOT编译器,可以绕过JIT限制
链接器也用于Monotouch,以解决Apple不允许(字节码)解释器和虚拟机安装在iPhone上的事实

2> Sam Saffron..:

FWIW

Mono已经有很长一段时间了.

下面是一个例子如何使用mkbundle.



3> Clay Nichols..:

http://www.xenocode.com/

这就是我们使用的.到目前为止,经过一年或有限的使用(可能在野外安装500次),零问题.

它的价格相当合理.他们有一些更昂贵的完整虚拟化软件(将您的应用程序与其他应用程序捆绑在一起,甚至是O/S).但我们并不需要所有这些.我们大约一年前的成本是400美元.我认为它现在有点贵,但比Thinstall少得多.

他们有很棒的演示,你可以下载,如IE 8.无需安装.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有