我知道这个问题之前出现过几次,但我无法为我们的简单案例找到答案:
是否有免费工具可以将小型 .NET C# 应用程序编译为本机可执行文件?
到目前为止,我发现的是昂贵的工具,它们剥离了 .NET 框架并将其编译为可执行文件,但在我们的案例中,这不是必需的。安装 .NET 框架是没有问题的,我们只是想预编译一个 C# 项目,以便用户出于安全原因无法反编译 IL 代码。.NET 的 obsucator 是不够的,因为我们有敏感的代码部分。
Mono-AOT 不是一个选项,因为它需要在我所了解的目标机器上安装单声道。
Ngen.exe 似乎是最接近我们需要的,但是我们如何分发输出文件呢?它似乎也包含 IL 代码,正如它所说的“每当 NGen 生成的图像在不兼容的环境中运行时,.NET 框架都会自动恢复为使用 JIT”。
这种情况下是否有任何实用的工作流程?
EDIT2:我真的很想知道为什么这个问题被关闭了......
解决方案是来自 Mono 项目的mkbundle:
我找到了一个 shell 脚本,它使用 Mono 的 mkbundle 将 .NET 应用程序编译为独立的本机可执行文件,并将其修改为最新版本,截至 2013 年 5 月,您可以按如下方式使用该脚本:
https://gist.github.com/tebjan/5581296
1.) 安装 cygwin 并确保选择以下软件包: - gcc-mingw - pkg-config - mingw-zlib1 - mingw-zlib-devel
2.) 安装 Mono 发行包:“Mono for Windows, Gtk#, and XSP”
3.) 下载脚本并将其放在您的应用程序旁边并对其进行修改以适应您的环境(仔细阅读文件中的注释)。
4.) 打开 cygwin 并导航到可执行文件和 scipt 所在的应用程序的输出文件夹,例如 YourProject/bin/Release
5.) 使用以下命令执行脚本:./mkbundle_cygwin.sh
故障排除:如果捆绑的可执行文件无法运行,请确保原始 .NET 应用程序在单声道上运行。您可以通过调用 mono.exe 并将您的 .NET 应用程序传递给它或通过安装 XamarinStudio 并从那里运行您的项目来测试它(确保将 mono 设置为运行时)。