有没有办法将.NET开发的应用程序转换为本机可执行文件(包括源代码)?
安装整个框架(最多为.NET Framework 3.5 SP1)需要花费大量时间 - 并非总是从Internet更新计算机。是否可以调用NGen来生成独立的可执行文件?
由于
答案 0 :(得分:12)
现在还没有,但是Mono项目团队正在研究Ahead of Time compiler,它可以满足您的需求。 Mono的目的是在iPhone上运行(如Unity),但它适用于所有平台。
编辑:它确实支持Mono x86,但我不确定他们是否已经包含了依赖类中包含的功能(虽然从我听过的采访中,已经计划好了)
编辑2:目前支持包含依赖项,感谢Dykam!
答案 1 :(得分:9)
不,NGen代码仍然需要框架 - 它只是在您自己的程序集中预先JIT代码。它还需要CLR本身的框架。
我相信Mono有一个他们计划用于iPhone的静态编译器。我不知道这是否适用于Windows。
曾经有一种名为Thinstall的产品,有些人用它。它现在被称为ThinApp - 基本上它是应用程序虚拟化。这是商业广告,但你很可能能够获得试用版。
就我个人而言,我有点担心任何这样的产品 - 在部署方面,偏离主流的做事方式听起来像是许多支持电话的配方。出现了很多错误。我并不是说它不起作用,只是因为我会保持警惕。
你看过.NET 3.5 (SP1) Client Profile了吗?这可能有助于降低您的安装要求。
答案 2 :(得分:6)
使用.net 3.5 SP1,可以安装.net框架的较小子集。看看这个截图:
(来源:windowsclient.net)
答案 3 :(得分:3)
您可以使用NGen使您的应用程序成为本机可执行文件,但它仍将依赖于.Net框架。
答案 4 :(得分:3)
NGen将exes编译为本地exes,因此它们不需要在运行时进行JIT编译。但他们仍然依赖于框架。
有一些商业公司确实提供了将.net程序集编译成独立版本的产品。 Xenocode和vmware的Thinapp。两者都不便宜。
答案 5 :(得分:1)
有些混淆器会这样做,你必须事先做好(在你把它发送给你的用户之前)。一个例子是remotesoft's Salamander。
答案 6 :(得分:1)
您只需要安装您要定位的.NET版本,例如.NET1.1 或 .NET2.0
修改:如果您需要定位3.5版本,则需要同时安装2.0和3.5
ILMerge(免费)可以将多个程序集合并为一个,但我认为它不适用于核心运行时。
简而言之,我认为如果您想运行.NET程序,则需要安装.NET Framework。
答案 7 :(得分:1)
答案 8 :(得分:1)
来自vmware的ThinApp(以前称为Thinstall)。曾经非常昂贵。
答案 9 :(得分:1)
我们在2007年为解决这个问题而成立的唯一产品是 Xenocode Postbuild 。从那时起我们成功使用该产品,我们还使用了相当不错的虚拟化功能。
唯一的问题是我们购买的版本不支持Windows 7(您不需要安装.net框架来运行使用版本< 4.0编译的程序)。所以我写信给Xenocode。他们回答了
为了获得对Win 7的支持,您应该升级到最新版本的Postbuild(现在称为 .NET Obfuscator )。 Win 7不是Postbuild 2007支持的平台。
答案 10 :(得分:1)
为什么不是Ngen.exe? http://msdn.microsoft.com/en-us/library/6t9t5wcf(v=vs.80).aspx
它还将.Net Programs
转换为Native Programs
,如果您拥有.Net Framework