8

我知道 C++ 代码直接在本地机器上运行。我也知道我们可以使用 NGen.exe 将 c# 代码编译为本机代码。我的问题是

如果我们使用 Native 代码生成器 NGen.exe 将 c# 代码编译成原生代码,还需要 .NET 框架来运行吗?

4

3 回答 3

6

事实上,如果你将 C++ 代码编译成 Windows 可执行文件,你仍然需要 Win32 dll 和其他东西。你的程序不能在除了你的程序之外没有任何东西的 CPU 上运行。

C# 也是如此。如果将 C# 编译为本机代码,则不需要 JIT 编译器,它是 .NET 运行时的一部分。但是您仍然需要 .NET 运行时的所有其他部分。

例如,.NET 框架及其所有类都没有链接到您的程序中。如果他们将所有必需的 .NET 类放入您的二进制文件中,那么一个简单的Hello world应用程序就会变得庞大。

于 2012-10-20T22:22:31.333 回答
1

您可以使用 mono 构建一个 C# 应用程序,该应用程序的所有内容都使用静态链接的框架库进行了预编译,并且不需要单独的运行时。

不过,我不会推荐它。并非所有东西都可用于静态链接,使用 JITter 的好处之一是它可以让您的代码在所有部署中平均更快,因为您现在可以更好地利用特定于机器的优化。即使是单声道也不是开箱即用的。

于 2012-10-20T23:32:45.580 回答
0

的,您需要框架,因为您的应用程序使用的库来自框架。

当您使用 NGen 时,不仅您的代码是在本机代码上编译的,大量的框架代码也被“本地化”,只是您的应用程序使用的正确部分。

所有这一切都不会改变您的程序集(exe 或 dll)物理字节,这会将 IL 编译为本机并将此本机字节存储在已编译的程序集缓存中。

编译程序集缓存中的引用仍然需要一些框架组件,特别是框架核心,它是一开始的本机代码。

于 2012-10-21T14:13:16.080 回答