首页 / 知识
关于编译:如何将.NET应用程序编译为本地代码?
2023-04-14 07:42:00
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工具 |
最新内容
相关内容
linux交叉编译命令?
linux交叉编译命令?,工具,平台,位置,网上,环境,基础,代码,编译器,路径,目标,安装完交叉编译器后输入arm-linux-gcc命令出现arm-none-linux-gnulinux编译源代码命令?
linux编译源代码命令?,工具,代码,百度,最新,环境,项目,系统,电脑,密码,内核,linux怎样编译git源码包1、linux的源码是在/usr/src这个目录下,此linux编译时显示命令?
linux编译时显示命令?,系统,基础,工具,代码,百度,下来,网上,命令,内核,文件,LINUX中此程序运行后,为何刷新不出命令提示符?1、有几个原因:一:你linux进程运行命令?
linux进程运行命令?,系统,工作,状态,地址,信息,进程,基础,命令,管理,软件,linux常用命令有哪些1、linux系统常用操作命令linux系统常用操作命linux只能命令行编译?
linux只能命令行编译?,系统,代码,工具,软件,密码,平台,项目,设计,最新,设备,Linux能直接编译C语言吗?1、在Linux下面,如果要编译一个C语言源程linux显示运行命令?
linux显示运行命令?,系统,服务,状态,信息,工具,数据,电脑,标准,管理,时间,如何查看linux服务器运行状态?1、linux怎么查看服务器状态?我们一起linux运行vim命令?
linux运行vim命令?,系统,工具,官方网站,模式,基础,数据,代码,环境,入口,命令,如何使用Linux系统中的Vim编辑器1、vim编辑器的三种模式:一般模式linux监控命令运行?
linux监控命令运行?,系统,工作,地址,信息,工具,情况,标准,环境,命令,状态,linux服务器监控的几个方法和命令uptime 该命令直观的显示了服务器linux命令行编译c?
linux命令行编译c?,代码,环境,系统,工具,平台,终端,程序,编辑,文件,源程序,在linux里,c程序的编辑、编译、调试的详细步骤是什么?编辑器用vi或linux中命令停止运行?
linux中命令停止运行?,系统,代码,第一,命令,进程,指令,程序,方法,接线,硬盘,linux怎么停止当前命令首先,连接相应linux主机,进入到linux命令行状linux中如何编译命令?
linux中如何编译命令?,系统,代码,基础,暂停,环境,工具,百度,命令,文件,终端,在linux0.12系统中编译0.12内核时,使用什么命令利用tar命令,可以把linux自动运行命令?
linux自动运行命令?,服务,系统,时间,代码,周期性,第一,命令,管理,在线,状态,linux计划任务(自动化执行任务的利器)1、Linux计划任务是一种自动