c# - 组装类型 - 有什么区别

标签 c# .net assemblies

静态和动态装配有什么区别。只有一个可以从文件加载而另一个可以在程序运行期间创建这一事实吗?

最佳答案

静态程序集可以包括 .NET Framework 类型(接口(interface)和类),以及程序集的资源(位图、JPEG 文件、资源文件等)。静态程序集以可移植可执行 (PE) 文件的形式存储在磁盘上。您还可以使用 .NET Framework 创建动态程序集,这些程序集直接从内存中运行并且在执行之前不会保存到磁盘。您可以在动态程序集执行后将它们保存到磁盘。

静态程序集 是那些永久存储在磁盘上的程序集。它们可能包括 .NET Framework 类、接口(interface)以及资源文件。这些程序集不是直接从内存加载的,而是在 CLR(公共(public)语言运行时)请求它们时直接从磁盘加载的。这些程序集用于在磁盘上作为文件或文件集存储。每当编译 C# 代码时,都会得到 STATIC 程序集。

动态程序集 是那些在执行前不存储在磁盘上的程序集,实际上在执行后它们存储在磁盘上。当 .NET 运行时调用它们时,它们直接从内存而不是磁盘加载。 Reflection emit 提供了多种创建动态程序集的方法,这意味着这些是使用 System.Reflection.emit 命名空间在内存中创建的。System.Reflection.Emit 命名空间包含允许编译器或工具发出元数据和 Microsoft 中间语言 (MSIL) 的类,以及可选择在磁盘上生成一个 PE 文件。当应用程序需要这些程序集中的类型时,这些动态程序集将在运行时动态创建

简单来说,静态程序集是我们每天与之交互的普通程序集加载解析它等,而动态程序集是您通过反射和调用创建它的程序集。

信息来源:http://www.dotnetheaven.com/article/static-assembly-vs-dynamic-assembly-in-csharp和MSDN

关于c# - 组装类型 - 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20153063/

相关文章:

c# - 为什么这种类型转换会导致错误?

c# - 如何动态找出所有具有自定义属性的方法

sql-server-2005 - 在 SQL : MSG 33009 中创建程序集时出错

c# - 获取Windows任务栏中当前可见的应用程序(或Windows)列表

c# - 使用 MVVM 以编程方式创建 XAML Canvas

c# - .net 中的 XML 序列化

c# - Visual Studio 2013 中的 ClickOnce 没有网页发布选项

c# - 正则表达式允许除零以外的所有其他数字,如 1、10、15、90、92...等?

c# - 无法将类型 'double' 隐式转换为 'RadTextBox'

c# - 如何从/bin 目录中加载所有程序集