30

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

4

12 回答 12

21

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

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

根据 CLR 通过 C#:

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

编辑:

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

于 2008-09-26T17:23:46.353 回答
20

Remotesoft 有一个: Salamander .NET Linker

我没有任何经验。

于 2008-09-26T17:23:02.250 回答
7

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

于 2008-09-26T17:25:18.377 回答
5

可以做到这一点的另一个(昂贵的专有许可证起价 1599 美元)产品是Xenocode Postbuild。不过我自己没用过,它的成本大约是一个非洲小国的国民生产总值……

于 2008-09-26T17:40:26.827 回答
4

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

于 2014-05-01T07:12:01.067 回答
3

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

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

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

不,出于所有意图和目的,您不能这样做。第 3 方的解决方法可能在某些情况下有效,但到那时我不会再将其视为“托管代码”或“.NET”。

于 2008-09-26T18:54:35.213 回答
2

编译部分有IL2CPU

于 2009-02-10T15:35:09.093 回答
1

我不认为这是可能的。您可以进行预装配,但仍然需要框架。

于 2008-09-26T17:21:44.407 回答
1

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

但是,您可以使用 ClickOnce 或 Windows Installer 来部署它,这样缺少的框架就不是一个大问题:您可以告诉安装程序下载框架并安装它。

于 2008-09-26T17:24:21.780 回答
1

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

于 2008-09-26T17:47:15.860 回答
1

查看 MONO 项目:带有 --aot 选项的单声道命令。http://www.mono-project.com/AOT

于 2009-02-10T17:12:21.357 回答
0

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

于 2008-09-26T17:44:55.287 回答