我想在不安装 .NET Framework 的情况下分发我的 .NET 程序。是否有可能将 .NET 程序编译成机器码?
我想在不安装 .NET Framework 的情况下分发我的 .NET 程序。是否有可能将 .NET 程序编译成机器码?
是的,你可以使用Ngen.exe进行预编译,但这并不能消除CLR的依赖性。
你仍然需要同时提供IL程序集,Ngen的唯一好处在于应用程序可以在没有调用JIT的情况下启动,因此可以实现真正快速的启动时间。
根据《CLR Via C#》:
Ngen预编译的程序集通常比JIT编译的程序集慢,因为JIT编译器可以对目标机器进行优化(32位?64位?特殊寄存器?等等),而NGEN只会生成一个基准编译。
编辑:
关于CLR Via C#的上述信息存在一些争议,有人说你必须作为安装过程的一部分在目标机器上运行Ngen。
Remotesoft推出了一个产品:Salamander .NET Linker
但我对此没有任何经验。
还有一个可以实现这一功能的产品是Xenocode Postbuild,但它很昂贵且需要购买许可证,起价为1599美元。虽然我自己没有使用过,因为它的价格大约相当于一个小非洲国家的国民生产总值...
是的,现在你可以了!最近微软宣布了.NET Native技术,它将你的应用程序与.NET Native运行时(他们称之为MRT)编译成一个二进制文件(实际上是一个可执行文件和一个动态库)。
查看链接: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx http://blogs.msdn.com/b/dotnet/archive/2014/04/24/dotnetnative-performance.aspx
我认为这是不可能的。你可以制作一个预编译的程序集,但仍然需要框架。
我认为你不应该这样做:这是JIT编译器的任务。
但你可以使用ClickOnce或Windows Installer来部署它,以便缺少的框架不会成为一个大问题:你可以告诉安装程序下载框架并安装它。
ngen
可能会在目标机器上的安装过程中被调用,据我所知,这实际上已经为使用 .NET 实现的各种 Microsoft 产品完成了。 - Konrad Rudolphngen
必须在目标机器上调用。ngen
会在本地机器 GAC 中安装本机映像!在开发人员的机器上预编译是无用的。 - Konrad Rudolph