有一个完全用C#编写的程序,其目标是.NET Framework 2.0。 有没有办法我可以以某种方式编译(翻译)托管的EXE到本地的一个,所以它可能是.NET的不可知论者?我知道这可能是商业产品......但它们有点贵。将.NET应用程序转换为x86本机代码
问题是,我们要在运行Windows XP且未安装.NET Framework的计算机上部署该程序。还要求程序的大小不得超过500Kb(最大1Mb),因为它是从Web服务器下载的(现在的大小为255Kb)。这就是为什么我们无法将一个完整的.NET FX(甚至是一个减少的)添加到下载的程序文件中。
很明显,这是一个可怕的软件工程错误,应该尽早检测并避免,以便我们可以使用C++等本机技术代替。
我们现在已经尝试过Novell的Mono - Linux,MAC和Windows .NET Framework的开放源代码实现。 Mono由C#编译器,IDE,运行时(CLR)和类库程序集(如System.dll和mscorlib.dll - 非常类似于安装到GAC的.NET类库程序集)组成。 我们试图做的是找到CLR文件并将它们与我们的程序文件以及一些程序集一起发送。这样,程序就可以通过在用户计算机上运行“mono program.exe”(命令提示符)来调用。 除了最终用户使用CLR文件(mono.exe和mono.dll)带来的不便外,总共大约2.5 Mb,远远大于所需的500 Kb或甚至1 Mb。
所以,我们已经离开,没有其他选择,只能由编译器给我们的.NET应用程序转换为原生一个,但问题依然存在 - 我们应该用什么样的编译器,我们在那里能找到一个...
现在我已经偶然发现了Microsoft Research的Singularity OS项目。它是一个用托管代码编写的开源研究操作系统(至少部分)。 Singularity操作系统包括一个Bartok编译器,操作系统使用该编译器将托管程序转换为本地程序(x86 32位)。应该指出的是,Bartok不能将.NET 2.0的所有方面都转换为本地代码,但大部分都是这样。然而我还没有学会如何使用奇点...
如果你能提供给我关于这个问题的一些有用的技巧和建议,你对Singularity OS和Bartok编译器的经验,我将非常感激你或者另一种方法解决我忽视的问题和解决方法。
非常感谢您提前!
最后,使用Mono的完整AOT功能(在Callum Rogers的建议中),我设法生成了缺少CLI标头的program.exe.dll。 因此,它看起来像我本土的DLL。但我不知道如何将该DLL转换为exe或使其运作。 此外,这个dll似乎没有公开任何感兴趣的功能,如主功能。
莱欺骗:http://stackoverflow.com/questions/45702/is-there-some-way-to-compile-a-net-application-to-native-代码 –
您是试图制作这个跨平台,还是只是删除框架库的依赖关系? –
我只是试图删除.NET Framework的依赖关系,以便它可以在没有安装.NET FX的Windows XP上运行。 – Vlad