图转自:(4条消息) C#编译过程图解_u013905744的专栏-CSDN博客
编译器将c#代码编译成DLL/EXE,DLL/EXE包含metadata(清单数据,对代码的描述)和IL(中间语言),IL经过CLR/JIT(仅在编译时进行,编译后缓存)第二次编译才是机器码(计算机可以直接使用)。
程序集具有以下属性:
-
程序集以 .exe 或 .dll 文件的形式实现 。
-
对于面向 .NET Framework 的库,可以通过将程序集放入全局程序集缓存 (GAC),在应用程序之间共享程序集。 必须先对程序集进行强命名,然后才能将它们包含到 GAC 中。 有关详细信息,请参阅具有强名称的程序集。
-
只有在需要使用时才会将程序集加载到内存中。 如果未使用程序集,则不加载。 也就是说,使用程序集,可以在大型项目中高效管理资源。
-
可以使用反射,以编程方式获取程序集的相关信息。 有关详细信息,请参阅反射 (C#) 或反射 (Visual Basic)。
-
你可以加载一个程序集,以使用 .NET Core 中的 MetadataLoadContext 类以及 .NET Core 和 .NET Framework 中的 Assembly.ReflectionOnlyLoad 或 Assembly.ReflectionOnlyLoadFrom 方法来检查该程序集。