How to compile a .NET application to native code?如果要在无法使用.NET框架的计算机上运行.NET应用程序,请执行以下操作: 有什么方法可以将应用程序编译为本机代码? Microsoft有一篇文章描述了如何将MSIL编译为本机代码 您可以使用Ngen。
不幸的是,您仍然需要框架中的库才能运行程序。我没有MS.Net框架SDK所具有的功能,该功能使您可以将所有必需的文件编译为单个可执行文件 RemoteSoft制作了一个工具,可将.NET应用程序编译为可在不安装.NET的情况下运行的程序包。我没有任何经验: RemoteSoft am 我已经测试了其中的几个,目前唯一支持.NET 3.5并具有出色虚拟化堆栈的是Xenocode Postbuild 使用ngen,您仍然需要安装.NET框架,但是使用这样的工具,将所有托管代码编译为本机代码,因此您可以将其部署到没有框架的机器上。 微软已经宣布了其.NET Native Preview,它将允许在不安装框架的情况下运行.NET应用程序。 看看:http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx 常见问题解答:http://msdn.microsoft.com/zh-CN/vstudio/dn642499.aspx 您可以从此处下载适用于VS2013的Microsoft .NET Native:http://msdn.microsoft.com/zh-CN/vstudio/dotnetnative 正如这里提到的其他一些答案一样,您可以使用.NET本机工具将您的应用编译为本机代码。但是,与这些答案不同的是,我将解释如何做。 脚步: 安装dotnet CLI(命令行界面)工具,它是新的.NET Core工具链的一部分。我们将使用它来编译我们的应用程序;您可以在这里找到有关它的好文章。
打开一个shell提示符,然后 输入:
而已!完成后,您的应用程序将被编译为单个二进制文件,如下所示:
这将是一个独立的可执行文件;不包括PDB,程序集或配置文件(万岁!)。 另外,如果您想要一个更快的程序,可以运行以下命令:
这将使用C ++代码生成器(而不是RyuJIT)优化您的程序,因此您的应用程序甚至针对AOT场景进行了优化。 您可以在dotnet CLI GitHub存储库中找到关于此的更多信息。 是的,使用本地图像生成器Ngen。但是,您需要注意许多事项:
总而言之,只有在需要减少应用程序的启动时间时,才值得使用Ngen。
您可以!但是,您只能使用.NET 1.1(没有通用名称): 但是,这意味着编译实际上是本机的,因此您将不再能够部署单个字节码程序集,每个平台将需要一个。 最初设计它是因为没有适用于iPhone的.NET或Mono,因此这就是他们制造MonoTouch的方式。 您可以使用称为.NET Native的新的预编译技术来执行此操作。在此处查看:http://msdn.microsoft.com/zh-CN/vstudio/dotnetnative 当前,它仅适用于Windows Store Apps。它执行单个组件链接。因此,.NET Framework库是静态链接到您的应用程序的。一切都将编译为本机,并且不再部署IL程序集。应用不会针对CLR运行,而是经过精简,优化的运行时,称为托管运行时(Mrt.dll) 如上所述,NGEN使用混合编译模型,并在动态场景中依赖IL和JIT。 .NET Native不使用JIT,但它支持各种动态方案。代码作者需要利用运行时指令为他们希望支持的动态方案提供提示。 您可以使用ngen.exe生成本机映像,但是您仍然必须分发原始的非本机代码,并且它仍然需要在目标计算机上安装框架。 确实不能解决您的问题。
2019年答案:使用dotnet / corert。它可以将.NET Core项目编译为独立的 在其GitHub主页上:
.NET的本质是能够安装已编译为MSIL的应用程序,然后通过JIT或Ngen安装,MSIL被编译为本机代码并本地存储在缓存中。从未打算生成可独立于.NET框架运行的真正的本机.exe。 也许有一些黑客可以做到这一点,但这对我来说并不安全。有太多需要框架的动态特性,例如:动态程序集加载,MSIL代码生成等。 我认为这是不可能的。您还需要分发.NET FW。如果要将.NET应用程序编译为本机代码,请使用NGen工具 |