如何将.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框架,但是使用这样的工具,所有托管代码都将编译为本机代码,因此我们可以将其部署到没有框架的机器上。