为什么 .NET 上下文中的 DLL 和 EXE 文件称为程序集?

问题描述

一位同事抱怨我给他的“程序集”(一个常规的、非 NET 编译的 C++ DLL 文件)不起作用。我回答说“什么是......集会?”。

所以通过阅读这个 dot net tutorial 和这个类似的 SO question 我的理解是,由 NET 创建的 DLL 和 EXE 文件(当然还有在 Linux 中使用 Mono 制作的可执行文件/共享库)是根本不同的来自“常规”本机代码库和可执行文件,因为它们不包含本机字节代码,而是据我所知一些奇怪的 MSIL(微软中间语言)代码。

所以我问

  • 为什么这些包含 .NET MSIL 的文件称为程序集?他们组装什么或组装什么?

还有

  • 为什么微软不让那些程序集具有与本机可执行文件/共享库不同的文件扩展名?如果没有 NET 解释器(或者称为 NET-VM?),它们就无法工作,那么为什么不将它们与常规本机代码区分开来呢?
    我的意思是 Python 有 .py 文件,Java 有 .class / .jar 文件等等......在我的情况下,这可以避免一些混淆。

解决方法

.NET 语言(C#、VB、F#)被转译为一种中间语言,称为通用中间语言 (CIL),以前称为微软中间语言 (MSIL)。当您打开 .NET 可执行文件时,它正在虚拟机中运行,该虚拟机将 CIL 代码即时转换为程序集。这通常称为 JIT 编译。
程序集是由 .NET 编译器生成的 CIL 和元数据文件,以及您包含在项目中的所有资源,并被压缩到一个文件中。这就是不能将本机程序集与 .NET 程序集一起使用的原因。它们是完全不同的东西。据我所知,本地程序集是程序集代码、程序员包含的资源,以及元数据(取决于语言)。
至于微软为什么让这些程序集与本地程序集同名,拥有新的文件扩展名有什么意义?此外,Python 是一种解释型语言,这意味着没有编译。它不能编译成程序集。

我希望能解决这个问题!另外,下次请在提问前先搜索问题的答案。 I found a similar question with a quick Google search

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...