【问题标题】:Turning .NET executable into native executable将 .NET 可执行文件转换为本机可执行文件
【发布时间】:2010-11-14 08:27:18
【问题描述】:

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

安装整个框架(直到 .NET Framework 3.5 SP1)需要很多时间 - 并非总是从 Internet 更新计算机。是否可以调用 NGen 来生成独立的可执行文件?

谢谢

【问题讨论】:

标签: .net compilation native-executable


【解决方案1】:

使用 .net 3.5 SP1 可以安装 .net 框架的较小子集。看看这个截图:
(来源:windowsclient.net

【讨论】:

    【解决方案2】:

    为什么不是 Ngen.exe? http://msdn.microsoft.com/en-us/library/6t9t5wcf(v=vs.80).aspx

    它还将.Net Programs 转换为Native Programs,如果你有.Net Framework,你已经拥有它

    【讨论】:

      【解决方案3】:

      我们在 2007 年为解决这个问题而创建的唯一产品是 Xenocode Postbuild。从我们成功使用这个产品的那一刻起,我们也使用了它相当不错的虚拟化功能。

      唯一的问题是我们购买的版本不支持 Windows 7(您不需要安装 .net 框架来运行使用版本

      为了获得对 Win 7 的支持,您应该升级到最新版本的 Postbuild(现在称为 .NET Obfuscator)。 Win 7 不是 Postbuild 2007 支持的平台。

      【讨论】:

        【解决方案4】:

        来自 vmware 的 ThinApp(以前称为 Thinstall)。不过过去很贵。

        http://www.vmware.com/products/thinapp/

        【讨论】:

          【解决方案5】:

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

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

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

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

          【讨论】:

          • 可能!我不想创建一个登录只是为了找出价格是多少,所以它一定是很多。
          【解决方案6】:

          不,NGen 的代码仍然需要该框架 - 它只对您自己的程序集中的代码进行预 JIT。它还需要 CLR 本身的框架。

          我相信Mono 有一个他们计划用于 iPhone 的静态编译器。我不知道这是否也适用于 Windows。

          曾经有一个名为 Thinstall 的产品,有些人用它来做这件事。它现在称为ThinApp - 基本上是应用程序虚拟化。它是商业的,但您很可能可以获得试用版。

          就我个人而言,我会有点担心任何此类产品 - 在部署方面,偏离主流的做事方式听起来像是需要大量支持电话的秘诀。有很多地方出错了。我并不是说它不起作用,只是我会保持警惕。

          你看过.NET 3.5 (SP1) Client Profile吗?这可能有助于稍微降低您的安装要求。

          【讨论】:

          【解决方案7】:

          目前尚不可用,但 Mono 项目团队正在开发一个 Ahead of Time compiler,它将满足您的需求。 Mono 的目的是在 iPhone 上运行(如 Unity),但它应该适用于所有平台。

          编辑:它确实支持 Mono x86,但我不确定他们是否已经包含了包含在依赖类中的功能(尽管从我听说的一次采访中得知,这是计划好的)

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

          【讨论】:

          • aot 已经工作了一段时间。我不明白你对依赖类的意思。如果您的意思是包含引用的 dll,那肯定是受支持的,因为 bcl 也必须编译到生成的可执行文件中。请注意,反射和相关不可用。
          • 谢谢迪卡姆。可能是该过程的优化(即仅包括必要的类和/或方法)被提到尚未准备好。
          • 仅供参考,我相信我提到的采访是 Hanselminutes 这一集的一部分:hanselminutes.com/default.aspx?showID=186
          【解决方案8】:

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

          编辑:如果您需要定位 3.5 版本,则需要同时安装 2.0 和 3.5

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

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

          【讨论】:

          • 是的,我认为你是对的 1.1 和 2.0 是分开的,但是 3.5 为 2.0 添加了额外的库
          【解决方案9】:

          一些混淆器会这样做,但您必须事先进行(在将其发送给用户之前)。一个例子是remotesoft's Salamander

          【讨论】:

            【解决方案10】:

            NGen 将 exe 编译为本机 exe,因此它们在运行时不需要进行 JIT 编译。但它们仍然依赖于框架。

            有一些商业公司确实提供将 .net 程序集编译成独立 exe 的产品。 Xenocode 和 vmware 的 Thinapp。不过两者都不便宜。

            【讨论】:

              【解决方案11】:

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

              【讨论】:

              • 我认为我们不能将其称为“本机可执行文件”,同时“仍然依赖于”.NET 框架。
              • 它是一个本机可执行文件,因为它包含本机代码,但它仍然依赖于外部库。
              • 好吧,我想外部库仍然需要安装 .NET Framework 运行时?或者“本机可执行文件”这个词可能不是最合适的?
              • 根据微软的说法,本机可执行文件是正确的术语。它是本机代码而不是 MSIL,但仍依赖于运行时库。
              • NGen 的程序集是本机代码,但仍依赖运行时进行垃圾收集(可能还有其他事情)。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-09-04
              • 1970-01-01
              • 2016-05-15
              • 2021-11-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多