如何将 .NET exe 转换为不需要 .NET Framework 运行的 Windows 二进制文件?

Posted

技术标签:

【中文标题】如何将 .NET exe 转换为不需要 .NET Framework 运行的 Windows 二进制文件?【英文标题】:How to convert a .NET exe to windows binary which does not require .NET Framework for running? 【发布时间】:2011-04-03 16:36:59 【问题描述】:

我有一个在 Visual Studio 2010 下编译的 exe 文件(它的源项目是带有 C# 的 Windows 窗体应用程序)。 我必须将此 exe 嵌入到 installsheild msi 安装文件中,并且它可以安装在任何 Windows 操作系统上(支持 XP 和更高版本)。但是为了运行我的 exe,最终用户首先必须在他们的系统上安装 Microsoft .net framework 4。 我正在寻找一种解决方案,将我的 .NET 本机 exe 转换为无需安装 .NET Framework 即可执行的 .NET-FREE exe。 有没有办法做到这一点? (我的意思是一种方式期望mono-project)

【问题讨论】:

Is there some way to compile a .NET application to native code?的可能重复 即使在技术上可行(比如虚拟化注册表和磁盘,我什至没有提到支持问题...),许可证也会阻止您重新分发所需的 .NET 程序集。它们必须由 Microsoft 的官方安装程序安装。 问题是安装 .NET 框架还是升级它? SP2 之后的大多数 XP 版本都安装了 .NET,而所有以后的版本都将其作为基础包。如果它只是升级它的问题,为什么不使用单击一次来处理包确定? 最好尝试将 Microsoft 的 .NET 框架安装程序嵌入到您的设置中。恕我直言,每个 Windows 机器上都应该预装最新的 .NET 框架版本。 【参考方案1】:

Mono 至少在某些平台上支持提前编译。您也许还可以使用您的程序部署单声道。但我不确定 Mono 是否支持 Windows 上的 WinForms。

我认为 Microsoft 的 .net 实现不支持这种部署,所以你不走运。

【讨论】:

【参考方案2】:

您无法创建无 .NET 的应用程序,但您可以尝试使用 ILMerge 实用程序尽可能降低 .NET 版本要求。例如,我成功地使用它来将 3d 方工具要求从 .NET 4.5 降低到 4.0。

该工具有很多参数,但通常您只需要以下参数:

ILMerge.exe /v4 /useFullPublicKeyForReferences /out:target.exe source.exe sourceLib1.dll sourceLib2.dll

现在确定这是否是您的问题,但在某些情况下可能会有所帮助。

【讨论】:

以上是关于如何将 .NET exe 转换为不需要 .NET Framework 运行的 Windows 二进制文件?的主要内容,如果未能解决你的问题,请参考以下文章

C# 如何将代码附加到正在运行的 .NET .EXE 的末尾,最好是从该 .EXE 内部?

VB.net 如何将数据转换为位图(Bitmap)所需要的byte()数组?急!!!!

如何从 .NET WPF 运行 C 程序的 .exe? [复制]

将 vb.net 字典转换为 vba 字典

需要帮助将 c# 中的 opencv 转换为 vb.net

如何将 .net 核心 RSA pem 转换为 xml?