我试图找到Assembly和托管模块之间的区别。
构建应用程序后,程序集将加载到bin-> Debug->中。
例如我的程序集名称为Bawolf.Practise.exe.
可以通过ildasm.exe Bawolf.Practise.exe.
托管模块 - 托管模块是标准的32位Windows便携版 可执行文件(PE32)或需要的标准64位Windows可移植可执行文件(PE32 +)文件 CLR要执行。
我的问题是程序集也是一个可执行文件,我可以在文件夹中找到它,所以托管模块位于何处以及如何查看?托管模块和组件之间的区别是什么?模块的确切含义是什么?请以简单的方式解释!
答案 0 :(得分:2)
如果您曾使用过C或C ++编译器,那么这个概念很容易理解。他们的构建模型是编译器一次将一个源代码文件转换为对象模块。 Windows上的.obj文件,Unix上的.o文件。然后,链接器将对象模块组合成可执行程序。
上个世纪很难有这种构建模型,计算机没有足够的内存来允许在没有中间对象模块的情况下在一个步骤中构建可执行文件。在一台16位机器上,就像PDP-11一样,连接步骤非常缓慢。如果你构建一个像Chrome这样的浏览器,那么今天仍然很长。
.NET也有这个构建模型。对象模块是一个.netmodule,使用C#编译器的/ target:module选项创建。链接器是al.exe
虽然这可能是在早期的.NET引用时使用的,但它今天很少使用 。计算机有足够的内存和.NET使得非常简单地将程序逻辑分解为单独的程序集。创建一个超过10兆字节的产品是非常不寻常的,这不会给现代机器造成太大影响。您可以使用IDE创建的项目类型也不支持它,因此它主要是学术性的。
答案 1 :(得分:0)
exe文件包含可执行代码(即编译/链接,以便OS可以运行它)。当exe启动时,操作系统会转到它的标准部分,并开始运行那里找到的代码(这就是输入点)。
在.NET exe中,入口点包含调用.NET运行时(dll)的代码,并告诉运行时.exe中IL的开始位置。运行时自动启动,然后开始在.NET exe中编译和运行IL代码。
因此.NET exe在入口点包含一些样板代码(由编译器生成) - 这就是其中的所有可执行代码。它还包含编译为IL的.NET代码,在运行时编译它之前它是不可执行的。
在您使用它的意义上的模块(在不同的地方和上下文中使用不同的方式)是一个只有.NET编译器担心的瞬态事物。它是一个.NET代码块,编译器在将一组源文件编译为单个exe或dll时将其视为一个单元。
.NET程序集可以是exe文件或dll文件。