首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.NET应用程序链接器的现状(也就是“请先生,可以给我一个链接器”2009版)

.NET应用程序链接器的现状(也就是“请先生,可以给我一个链接器”2009版)
EN

Stack Overflow用户
提问于 2009-03-20 22:07:05
回答 8查看 6.6K关注 0票数 71

这里的许多人可能对Joel Spolsky最受欢迎的博客文章之一Please Sir, May I Have a Linker很熟悉,在这篇文章中,他迫切需要一种方法来消除对.NET框架的依赖,以便可以开发和销售独立的应用程序。

当时,Visual Studio开发团队的Jason Zander回答with his views on the topic,认为这个话题有点无意义--在运行时修复安全问题(以及其他问题)的能力是他们主要关心的问题。总体而言,很小的开销是值得的。

快进到2009年。现在有几个小组声称拥有C#链接器。(Jason Zander甚至自己也说过,不需要太多的时间就能实现一个。)我们现在有了一个巨大的200-300MB的跨平台完整的.NET 3.5安装程序,其中包含用于x86、x64和ia64的.NET版本,而不是可爱的十几兆下载的.NET 1.0。Microsoft对减小运行时大小的建议包括:

  • 解压可再发行文件,移除不需要的目标平台,然后将其重新组合在一起
  • 使用仅下载适用于您的平台的库的web引导程序
  • 使用客户端配置文件安装程序(2008年末的新版本),该安装程序的库有限,仅适用于x86

更糟糕的是,据我所知(如果我错了,请纠正我),这个客户端配置文件甚至没有在windows中注册为安装了.NET 3.5。这意味着如果计算机上安装了多个.NET 3.5客户端应用程序,则不会互相看到任何应用程序,运行时将一次又一次地重新安装!

我真的不知道微软在想什么。即使假设最坏的情况是安装在一个目标平台上(例如x64),并且只需要包含这些库,你的应用程序上仍然会有超过60MB的开销。即使是最知名的.NET应用程序之一,Paint.NET也充斥着Difficulties installing the application because of the massive .NET dependencies.,如果他们在发布免费应用程序时遇到问题,那么世界上其他地方的情况又会怎样呢?最后,他们不得不在安装自己的应用程序之前使用Make a bootstrapper that installed Microsoft Installer 3.1, the .NET runtime bootstrapper, and all their other dependent libraires

所以怎么样呢。一个链接器。有没有什么好的工具可以简单地构建C#应用程序,而不需要用户安装大量的.NET运行时?

更新:所以,看起来有几个选择:

单声道:

.NET:

看起来Mono工具正在被使用;基于.NET的工具呢?还有没有其他的经验,或者我们只能等待微软将其3.5推向所有人?一想到.NET 4.0需要多长时间才能发布,我就不寒而栗。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-03-29 13:36:35

Mono Linker为例。

这里列出的其他软件我不能多说,但作为Mono Linker的作者,我可以知道它做什么和不做什么。

Mono链接器只是一个托管链接器,所以根据定义,它接受程序集,并删除运行程序所不需要的东西。它不会将所有的程序集合并在一起,也不会让它们成为本机程序。

有一个ILMerge的Mono.Merge克隆,但它并不完整,它的作者也没有维护它。为了生成同时包含Mono运行时和程序集的本机程序,Mono提供了mkbundle tool

此外,由于它只是一个更改程序集的托管工具,如果你给它强命名的程序集,并且你没有私钥对它们进行签名,那么你在运行这些程序集时会遇到麻烦。

我写了几篇关于链接器的博客文章:

关于我们使用Linker的经验。Linker目前用于Mono项目的两个部分。它用于生成我们分发的程序集,以便人们嵌入我们的C#编译器Mono.CSharp.dll。你可以在PDC上观看Miguel's presentation,它描述了我们是如何做到这一点的。它非常简单,而且它是Linker的基本用法,它是一个可定制的工具,并且很容易为它编写定制步骤。

链接器的一种更复杂的用法是we create our Moonlight assemblies。Moonlight是我们Silverlight的实现,程序集是桌面程序集的子集。因此,我们链接桌面程序集以减小它们的大小,并使用自定义步骤来转换公共API以匹配Silverlight的。

所以,Linker有一些非常粗糙的边缘,比如命令行界面,或者你必须真正知道你在做什么,否则你可能会得到一些奇怪的程序集,但总而言之,它对我们来说真的很好。

票数 50
EN

Stack Overflow用户

发布于 2009-03-20 22:36:43

FWIW

Mono已经拥有had a linker很长一段时间了。

下面是如何使用mkbundle的example

票数 5
EN

Stack Overflow用户

发布于 2009-03-30 04:55:40

http://www.xenocode.com/

这就是我们使用的。到目前为止,经过一年左右的有限使用(可能在野外安装了500个),没有任何问题。

而且它的价格相当合理。他们有一些更昂贵的全虚拟化软件(将你的应用程序与其他应用程序甚至操作系统捆绑在一起)。但我们并不需要所有这些。我们一年前的花费是400美元,我想现在要贵一点,但比安装要便宜得多。

他们有很棒的演示,你可以下载,比如IE 8. No install required.

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/668188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档