为了迎合.NET,添加其他类型的扩展是没有任何意义的。
.NET可执行文件是PE文件,它们提供最少量的本机代码来引导正确版本的CLR并将IL拉入内存并交给CLR。
Windows本身就知道如何处理PE文件以及内置在EXE中的间接机制Windows也不需要了解.NET。
使用.il
文件,您需要在Windows中注册扩展名,然后确保加载了正确版本的CLR - 据我所知,您只能将扩展名与一个可执行文件相关联。
要支持CLR的多个版本,您需要某种中介,然后检查您的.il
文件以确定要加载哪个CLR ....并且事情在此之后变得复杂而脆弱。
在PE中打包所有这些问题整洁而优雅地解决了这些问题。
虽然这是一篇较旧的文章,但其原理在当前保持不变。NET框架:
An In-Depth Look into the Win32 Portable Executable File Format, Part 2
的关键部分 “的.NET头” 解释了这是如何工作:针对Microsoft .NET 环境下生产
可执行文件是第一和最重要的 PE文件。但是,在大多数情况下,在.NET 文件中的正常代码和数据是最小的。 .NET可执行的主要目的是 得到.NET特定 信息,例如元数据 和中间语言 (IL)到存储器中。另外,一个针对MSCOREE.DLL的.NET 可执行链接。 这个DLL是一个 .NET进程的起点。当加载一个.NET可执行文件 时,其入口点通常是一个 微小的代码段。这存根只是 跳转到 MSCOREE.DLL(_CorExeMain或 _CorDllMain)导出函数。从那里,MSCOREE负责并开始使用 元数据和来自可执行文件 的IL。此设置与使用MSVBVM60.DLL的Visual Basic(.NET之前) 中的应用程序的 类似。 .NET信息的起始点 是 IMAGE_COR20_HEADER结构, 当前在CorHDR.H中从 .NET Framework SDK和更新的 版本的WINNT.H中定义。在DataDirectory中, IMAGE_COR20_HEADER被 IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 条目指向。图10 显示了一个 IMAGE_COR20_HEADER的字段。所述 元数据的格式,方法IL,和其他东西 通过 将在随后的 文章描述IMAGE_COR20_HEADER指向。窗户
来源
2011-03-30 17:32:37
Kev
+1好问题。为了比较,这将更接近于Java部署的工作原理 - 对吗? '.jar'文件在运行之前必须转换为字节码(据我了解),这会影响其启动时间。我是Java新手,所以Java大师,请纠正任何错误陈述。 – harpo 2011-03-30 17:29:40
你在问关于文件内容还是扩展名? – SLaks 2011-03-30 17:35:37
Slaks - 我想知道两者。更多的信息更好.. – paseena 2011-03-30 17:38:11