是否可以将.NET IL代码编译为机器代码?

时间:2008-09-26 17:18:33

标签: .net visual-studio compiler-construction

我想在没有.NET框架的情况下分发我的.NET程序。是否可以将.NET程序编译为机器代码?

12 个答案:

答案 0 :(得分:20)

Remotesoft有一个: Salamander .NET Linker

我对此没有任何经验。

答案 1 :(得分:20)

是的,您可以使用Ngen.exe进行预编译,但这不会消除CLR依赖。

您还必须运送IL程序集,Ngen的唯一好处是您的应用程序可以在不调用JIT的情况下启动,因此您可以获得真正快速的启动时间。

根据CLR Via C#:

  

此外,使用预编译的程序集   Ngen通常比JIT更慢   程序集,因为JIT编译器   可以优化目标机器   (32位?64位?特殊寄存器?   等等,而NGEN只会产生一个   基线编制。

编辑:

CLR Via C#对上述信息存在争议,因为有些人说你只需要在目标机器上运行Ngen作为安装过程的一部分。

答案 2 :(得分:7)

有一些第三方工具可以做到这一点,例如

答案 3 :(得分:5)

另一种(昂贵的,专有的,许可证起价为1599美元)产品可以做到这一点Xenocode Postbuild。但是,我自己并没有使用它,因为它耗费了一个非洲小国的国民生产总值而且全部......

答案 4 :(得分:3)

  

是否可以编译.NET IL代码   机器代码?

是的,但.NET Framework在运行时(默认)或安装时(ngen)为您完成。除了其他原因之外,这个IL - >机器代码在每台安装机器上单独完成,因此可以针对该特定机器进行优化。

  

我想发布我的.NET   没有.NET框架的程序。   是否可以编译.NET   程序加工代码?

不,出于所有意图和目的,你不能这样做。第三方解决方法可能在某些情况下有效,但到那时我不再认为它是“托管代码”或“.NET”了。

答案 5 :(得分:3)

是的,你现在可以!最近微软发布了 .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

答案 6 :(得分:2)

编译部分有IL2CPU

答案 7 :(得分:1)

我不认为这是可能的。您可以制作预装配件,但仍需要框架。

答案 8 :(得分:1)

我认为你不应该:这是JIT编译器的任务。

但是,您可以使用ClickOnce或Windows Installer进行部署,以便丢失框架不是一个大问题:您可以告诉安装程序下载框架并安装它。

答案 9 :(得分:1)

如果您只关心部署框架的大小,可以阅读this

答案 10 :(得分:1)

使用--aot选项查看MONO项目:mono命令。 http://www.mono-project.com/AOT

答案 11 :(得分:0)

我一直认为将c#直接编译为机器代码而没有CLR依赖会很酷....