如何解决为什么 .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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。