将.NET可执行文件转换为本地可执行文件

15

有没有一种方法可以将.NET开发的应用程序转换为本机可执行文件(包括源代码)?

安装整个框架(最高版本为.NET Framework 3.5 SP1)需要很长时间,有时计算机无法从互联网更新。是否有可能调用NGen来生成独立的可执行文件?

谢谢。


您可以使用应用程序安装程序部署 .Net 框架:https://dev59.com/QkbRa4cB1Zd3GeqP39F5 - Greg
11个回答

12

目前尚不可用,但Mono项目团队正在开发Ahead of Time编译器 ,可以实现您要求的功能。旨在使Mono在iPhone上运行(如Unity),但它应该适用于所有平台。

编辑:它支持Mono x86,但我不确定它们是否已经包含了打包依赖类的功能(虽然从我听到的一次采访中,计划了这个功能)。

编辑2:感谢Dykam,目前支持包含依赖项。


AOT已经运行了一段时间。我不明白你所说的依赖类是什么意思。如果你指的是包括引用的dll,那肯定是支持的,因为BCL也必须编译到生成的可执行文件中。请注意,反射和相关内容不可用。 - Dykam
谢谢Dykam。可能是因为该过程的优化(即仅包括必要的类和/或方法)尚未准备好而被提到。 - Richard Szalay
供您参考,我认为我提到的面试是 Hanselminutes 的这一集的一部分:http://www.hanselminutes.com/default.aspx?showID=186 - Richard Szalay

9
不,在使用NGen处理后,代码仍需要框架——它只是预先JIT编译自己程序集中的代码。它还需要CLR本身的框架。
我认为Mono有一个静态编译器,他们计划在iPhone上使用它。但我不知道它是否也适用于Windows。
曾经有一个叫做Thinstall的产品,一些人用它来实现这个功能。现在它被称为ThinApp,基本上是应用程序虚拟化。它是商业软件,但你可能可以获得试用版本。
个人而言,我会对任何这样的产品感到有些担忧——离开主流方法,对于部署而言听起来像是会产生大量支持调用的配方。事情可能会出错得很多。我并不是说它无法运行,只是我会小心谨慎。

你看过.NET 3.5 (SP1)客户端框架了吗?这可能会有助于减少一些安装要求。


Thinstall被VMware收购并更名为“ThinApp”- http://www.vmware.com/products/thinapp/ - Simon P Stevens

6
使用 .net 3.5 SP1 版本,可以安装一个更小的 .net framework 子集。请看下面这张截图:Visual Studio Project properties
(图片来源:windowsclient.net

3

您可以使用 NGen 将应用程序转换为本地可执行文件,但它仍然依赖于 .Net 框架。


我认为,如果仍然依赖于.NET框架,我们就不能称之为“本地可执行文件”。 - lmsasu
2
它是一个本地可执行文件,其中包含本地代码,但仍然依赖于外部库。 - Richard Szalay
我想外部库仍然需要安装.NET Framework运行时吧?或者“本机可执行文件”这个术语不是最合适的? - lmsasu
1
本地可执行文件是微软的官方术语。它是本机代码而非 MSIL,但仍然依赖于运行库。 - Frozenskys
NGen生成的程序集是本地代码,但仍然依赖于运行时进行垃圾回收(以及可能的其他操作)。 - Richard Szalay
我应该说“本地映像”而不是“本地可执行文件”,但这与此处的问题无关。提问者想知道是否可以创建一个不依赖于.NET框架的.NET可执行文件。 - MusiGenesis

3
NGen将exe编译为本地exe,因此在运行时无需进行JIT编译。但它们仍然依赖于框架。
有一些商业公司提供将.net程序集编译为独立exe的产品,如Xenocode和vmware的Thinapp。不过它们都不便宜。

1
我们在2007年创立的唯一解决方案是Xenocode Postbuild。从那时起,我们成功地使用了这个产品,并且还使用了它相当不错的虚拟化功能。
唯一的问题是,我们购买的版本不支持Windows 7(在这里,您不需要安装.NET Framework来运行使用版本<4.0编译的程序)。所以我写信给Xenocode。他们回答说:
“为了获得Win 7的支持,您应该升级到最新版本的Postbuild(现在称为.NET混淆器)。Win 7不是Postbuild 2007支持的平台。”

1

1

这里有一个商业产品声称可以做到这一点:

http://www.xenocode.com/Obfuscator/

“安全部署.NET应用程序,无需安装.NET Framework”

不过我不知道这样做的缺点是什么。


可能吧!我不想创建一个登录账户只是为了查看价格,所以价格肯定很高。 - Kevin Laity

1

有些混淆器可以做到这一点,但你需要事先完成它(在将其发送给用户之前)。一个例子是remotesoft's Salamander


1

您只需要安装您所针对的.NET版本,例如.NET1.1 或者 .NET2.0

编辑: 如果您需要针对3.5版本,则需要安装2.0和3.5两个版本。

ILMerge (免费) 可以将多个程序集合并为一个,但我认为它不适用于核心运行时。

简而言之,如果您想运行.NET程序,则需要安装.NET Framework。


是的,我认为你是正确的,1.1和2.0是分开的,但3.5添加了额外的库到2.0。 - Frozenskys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接