如何将.NET应用程序编译为本机代码?

时间:2020-03-05 18:48:11  来源:igfitidea点击:

如果要在无法使用.NET框架的计算机上运行.NET应用程序,请执行以下操作:有什么方法可以将应用程序编译为本地代码?

解决方案

回答

是的,使用本地图像生成器Ngen。但是,我们需要注意许多事项:

  • 我们仍然需要CLR来运行可执行文件。
  • CLR不会根据其运行的环境(例如486 vs. 586 vs. 686等)动态地优化程序集。

总而言之,只有在需要减少应用程序的启动时间的情况下,才值得使用Ngen。

回答

Microsoft有一篇文章描述了如何将MSIL编译为本机代码

我们可以使用Ngen。

The Native Image Generator (Ngen.exe)
  is a tool that improves the
  performance of managed applications.
  Ngen.exe creates native images, which
  are files containing compiled
  processor-specific machine code, and
  installs them into the native image
  cache on the local computer. The
  runtime can use native images from the
  cache instead using the just-in-time
  (JIT) compiler to compile the original
  assembly.

不幸的是,我们仍然需要框架中的库才能运行程序。我没有MS.Net框架SDK所具有的功能,该功能使我们可以将所有必需的文件编译为单个可执行文件

回答

RemoteSoft制作了一个工具,可将.NET应用程序编译为可在不安装.NET的情况下运行的程序包。我没有任何经验:

RemoteSoft am

回答

我认为这是不可能的。我们还需要分发.NET FW。如果要将.NET应用程序编译为本机代码,请使用NGen工具

回答

我们可以使用ngen.exe生成本机映像,但是我们仍然必须分发原始的非本机代码,并且仍然需要在目标计算机上安装框架。

确实,这不能解决问题。

回答

.NET的本质是能够安装已编译为MSIL的应用程序,然后通过JIT或者Ngen安装,将MSIL编译为本机代码并本地存储在缓存中。它从未打算生成可独立于.NET框架运行的真正的本机.exe。

也许有一些黑客可以做到这一点,但对我来说听起来并不安全。需要框架的动态太多,例如:动态程序集加载,MSIL代码生成等。

回答

我已经测试了其中的几个,目前唯一支持.NET 3.5并具有出色虚拟化堆栈的是Xenocode Postbuild

使用ngen,我们仍然需要安装.NET框架,但是使用这样的工具,所有托管代码都将编译为本机代码,因此我们可以将其部署到没有框架的机器上。