无论您使用哪种编译器编译.NET语言, 结果是一个托管模块。托管模块是标准Windows 便携式可执行(PE)文件,需要CLR才能执行。的“以 未来,其他操作系统可能会使用PE文件格式 井“。
有没有其他人开始支持使用PE文件,或者至少有机会支持它? 除了.NET之外,其他任何框架(J2EE等)都会产生PE吗? PE的对应部分是什么?
答案 0 :(得分:3)
备注强>
如果您真的想知道除了Windows支持.NET /托管可执行文件之外的哪些其他平台,那么在询问PE格式时,您的问题有点广泛或有点误导。
PE文件格式基本上就是文件格式。目前,它主要用于两个服务:
以下列表包含两种用途的示例。更具体地说,只有Mono使用它,如上面第二种情况(而不是第一种情况)。所有其他人在上面第一个案例的意义上使用它(而不是在第二个案例中)。
为什么Microsoft选择.NET的PE文件格式?可能,因为他们已经拥有了所有的基础设施(加载等),并且只需要为.NET提供一些东西。例如,使用.NET(在Windows上),不必使用某种加载器命令来启动应用程序,例如java.exe -jar ...
或python.exe ...
,但可以启动并启动它,因为它是本机可执行文件。
图示过度简化,.NET PE文件只包含一个对mscoree.dll
的引用,然后它将作为托管应用程序加载和执行包含的MSIL代码。
<强>用途强>
ReactOS也应该使用PE格式(而不仅仅是.NET程序集的容器), 因为它应该与Microsoft Windows(NT)二进制兼容。
<强>更新强>
实际上,当您使用Google“pe文件格式”时,出现的第一个链接是this Wikipedia article about the PE format。它有一个关于文件格式使用的部分,它基本上包含以下内容:
不是真正意义上的真实操作系统,但仍然是:
mono
命令启动应用程序。所以你可以认为在这种情况下它并不是支持PE格式的操作系统(很像它不支持PHP脚本或其他)。但这确实是一个可论证且可能无关紧要的观点。请注意,OS / 2(2.x及更高版本)不使用PE,尽管历史上它可能具有(鉴于它和NT的共同历史)。它使用linear executable file format。
答案 1 :(得分:1)
Microsoft .NET与Windows有关,而不是跨平台。 Mono是CLR标准的跨平台实现,它可以在它支持的操作系统(Windows,OS X和许多其他)上执行.NET程序集(PE格式)。
Mono编译器(C#/ VB.NET)还以PE格式发出程序集以与Microsoft .NET兼容。
PE的同行太多了。 Java使用JAR。 Android使用APK。