如果我想在.NET框架不可用的机器上运行.NET应用程序;有什么方法可以将应用程序编译为本机代码吗?

有帮助吗?

解决方案

Microsoft 有一篇文章描述了如何 将 MSIL 编译为本机代码

您可以使用 恩根.

本机映像生成器(NGEN.EXE)是改善托管应用程序性能的工具。ngen.exe创建本机映像,该图像包含包含编译的处理器特定机器代码的文件,并将其安装到本地计算机上的本机映像缓存中。运行时可以使用缓存中的本机映像,而是使用“ jut-time”(JIT)编译器来编译原始组件。

不幸的是,您仍然需要框架中的库才能运行您的程序。据我所知,MS .Net 框架 SDK 没有任何功能可以让您将所有必需的文件编译为单个可执行文件

其他提示

RemoteSoft 制作了一个工具,可以将 .NET 应用程序编译成无需安装 .NET 即可运行的包。我对此没有任何经验:

远程软件蝾螈

我已经测试了其中的几个,目前唯一支持 .NET 3.5 并且具有出色的虚拟化堆栈的是 异种代码 后期构建

使用 ngen,您仍然需要安装 .NET 框架,但使用这样的工具,您的所有托管代码都会编译为本机代码,以便您可以将其部署到没有框架的计算机上。

微软已经宣布其 .NET 本机预览版 这将允许在不安装框架的情况下运行 .NET 应用程序。

看一看: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx

常问问题: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

您可以从这里下载 Microsoft .NET Native for VS2013: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

正如这里的一些其他答案所提到的,您可以使用 .NET 本机 将您的应用程序编译为本机机器代码的工具。然而,与这些答案不同的是,我会解释 如何 去做吧。

脚步:

  1. 安装 点网 CLI (命令行界面)工具,它是新的 .NET Core 工具链的一部分。我们将使用它来编译我们的应用程序;你可以找到一篇关于它的好文章 这里。

  2. 打开 shell 提示符并 cd 到您的应用程序的目录。

  3. 输入:

    dotnet compile --native
    

就是这样!完成后,您的应用程序将被编译为单个二进制文件,如下所示:

Native compiled .NET Core EXE

它将是一个独立的可执行文件;不包含 PDB、程序集或配置文件(万岁!)。


或者,如果您想要更快的程序,您可以运行以下命令:

dotnet compile --native --cpp

这将使用 C++ 代码生成器(而不是 RyuJIT)优化您的程序,因此您的应用程序针对 AOT 场景更加优化。

您可以在 dotnet CLI 中找到更多相关信息 GitHub 仓库.

是的,使用 恩根, ,本机图像生成器。但是,您需要注意以下几点:

  • 您仍然需要 CLR 来运行可执行文件。
  • CLR 不会根据其运行环境(例如,486对586对686等)

总而言之,只有当您需要减少应用程序的启动时间时,才值得使用 Ngen。

你可以!但是,您仅限于 .NET 1.1(没有适合您的泛型):Mono 提前编译 (AOT)

然而,这意味着编译实际上是本机的,因此您将不再能够部署一个字节码程序集,每个平台都需要一个。

它最初是因为没有适用于 iPhone 的 .NET 或 Mono 而设计的,所以他们就是这样制作 MonoTouch 的。

您可以使用称为 .NET Native 的新预编译技术来完成此操作。在这里查看: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

目前它仅适用于 Windows 应用商店应用程序。它执行单组件链接。因此 .NET Framework 库静态链接到您的应用程序中。所有内容都编译为本机,并且不再部署 IL 程序集。应用程序不是针对 CLR 运行,而是针对称为托管运行时 (Mrt.dll) 的精简、优化的运行时运行

如上所述,NGEN 使用混合编译模型,并依赖 IL 和 JIT 来实现动态场景。.NET Native 不使用 JIT,但它支持各种动态场景。代码作者需要利用 运行时指令 向 .NET Native 编译器提供有关它们希望支持的动态场景的提示。

您可以使用 ngen.exe 生成本机映像 您仍然必须分发原始的非本机代码,并且仍然需要在目标计算机上安装框架。

这确实不能解决你的问题。

.NET 的本质是能够安装已编译为 MSIL 的应用程序,然后通过 JIT 或 Ngen,将 MSIL 编译为本机代码并存储在本地缓存中。它从来没有打算生成一个可以独立于 .NET 框架运行的真正的本机 .exe。

也许有一些黑客可以做到这一点,但对我来说听起来并不安全。有太多的动态需要框架,比如:动态程序集加载、MSIL代码生成等

2019年答案:使用 点网/corert. 。它可以将.NET Core项目编译成独立的 .exe 文件。没有依赖项(除了系统库,例如 kernel32.dll)。我敢打赌这正是OP所需要的。

从其 GitHub 主页:

CoreRT 编译器可以将托管 .NET Core 应用程序编译为易于部署的本机(特定于体系结构)单文件可执行文件。它还可以生成独立的动态或静态库,可供用其他编程语言编写的应用程序使用。

我认为这是不可能的。您还需要分发 .NET FW。如果要将 .NET 应用程序编译为本机代码,请使用 NGen 工具

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top