.NET 中的程序集
2019/08/15

程序集构成了 .NET 应用程序的部署、版本控制、重用、激活范围和安全权限的基本单元。 程序集是为协同工作而生成的类型和资源的集合,这些类型和资源构成了一个逻辑功能单元。 程序集采用可执行文件 (.exe) 或动态链接库文件 (.dll) 的形式,是 .NET 应用程序的构建基块 。 它们向公共语言运行时提供了注意类型实现代码所需的信息。
在 .NET Core 和 .NET Framework 中,可以从一个或多个源代码文件生成程序集。 在 .NET Framework 中,程序集可以包含一个或多个模块。 因此,大型项目可以采用以下规划:由多个开发者单独开发各源代码文件或模块,最后整合所有这些内容以创建一个程序集。 若要详细了解模块,请参阅操作说明:生成多文件程序集。
程序集具有以下属性:
程序集以 .exe 或 .dll 文件的形式实现 。
对于面向 .NET Framework 的库,可以通过将程序集放入全局程序集缓存 (GAC),在应用程序之间共享程序集。 必须先对程序集进行强命名,然后才能将它们包含到 GAC 中。 有关详细信息,请参阅具有强名称的程序集。
只有在需要使用时才会将程序集加载到内存中。 如果未使用程序集,则不加载。 也就是说,使用程序集,可以在大型项目中高效管理资源。
可以使用反射,以编程方式获取程序集的相关信息。 有关详细信息,请参阅反射 (C#) 或反射 (Visual Basic)。
你可以加载一个程序集,以使用 .NET Core 中的 MetadataLoadContext 类以及 .NET Core 和 .NET Framework 中的 Assembly.ReflectionOnlyLoad 或 Assembly.ReflectionOnlyLoadFrom 方法来检查该程序集。
公共语言运行时中的程序集
程序集向公共语言运行时提供了注意类型实现代码所需的信息。 对于运行时,类型不存在于程序集上下文之外。
程序集定义以下信息:
公共语言运行时执行的代码。 请注意,每个程序集只能有一个入口点:DllMain、WinMain 或 Main。
安全边界。 程序集就是在其中请求和授予权限的单元。 有关程序集中安全边界的详细信息,请参阅程序集安全注意事项。
类型边界。 每一类型的标识均包括该类型所驻留的程序集的名称。 在一个程序集的范围中加载的称为 MyType 的类型不同于在另一个程序集范围中加载的称为 MyType 的类型。
引用范围边界。 程序集清单包含用于解析类型和满足资源请求的元数据。 该清单指定要在程序集外公开的类型和资源,并枚举它所依赖的其他程序集。 除非可迁移可执行 (PE) 文件中的 Microsoft 中间语言 (MSIL) 代码具有相关的程序集清单,否则不执行此代码。
版本边界。 程序集是公共语言运行时中无版本冲突的最小单元。 同一程序集中的所有类型和资源均会被版本化为一个单元。 程序集清单描述你为任何依赖项程序集所指定的版本依赖性。 有关版本控制的详细信息,请参阅程序集版本控制。
部署单元。 当一个应用程序启动时,只有该应用程序最初调用的程序集必须存在。 其他程序集(例如,包含本地化资源或实用工具类的程序集)可以按需检索。 这样,应用在第一次下载时就会比较精简。 有关部署程序集的详细信息,请参阅部署应用程序。
并行执行单元。 有关运行多个版本的程序集的详细信息,请参阅程序集和并行执行。
创建程序集
程序集可以为静态或动态。 静态程序集存储在磁盘上的可迁移可执行 (PE) 文件中。 静态程序集可以包括接口、类和资源(如位图、JPEG 文件和其他资源文件)。 你还可以创建动态程序集,动态程序集直接从内存运行并且在执行前不保存到磁盘上。 你可以在执行动态程序集后将它们保存在磁盘上。
有几种创建程序集的方法。 你可以使用可创建 .dll 或 .exe 文件的开发工具,例如 Visual Studio 。 可以使用 Windows SDK 中的工具创建具有从其他开发环境中创建的模块的程序集。 还可以使用公共语言运行时 API(例如 System.Reflection.Emit)来创建动态程序集。
可以采用以下方法编译程序集:在 Visual Studio 中生成程序集、使用 .NET Core 命令行接口工具生成程序集,或使用命令行编译器生成 .NET Framework 程序集。 要详细了解如何使用 .NET Core CLI 生成程序集,请参阅 .NET Core CLI 概述。 要了解如何使用命令行编译器生成程序集,请参阅使用 csc.exe 的命令行生成(适用于 C#),或者从命令行生成(适用于 Visual Basic)。

.NET 中的程序集相关推荐

  1. ASP.NET Web Froms开发模式中实现程序集的延迟加载

    延迟加载是一个很大的诱惑,可以达到一些比较好的效果,比如: 1.在实体框架中,由于关联数据的数量和使用时机是不确定的,通过延迟加载,仅在使用的时候去执行关联数据的查询操作,减少无谓的数据查询操作,可以 ...

  2. 【笔试面试】C#中的程序集

    1.      C#中的程序集(Assembly) 答:程序集是包含一个或多个类型定义文件和资源文件的集合.它允许我们分离可重用类型的逻辑表示和物理表示. 程序集是一个可重用.可实施版本策略和安全策略 ...

  3. 在Biztalk应用中调用程序集的方法

    本文通过一个简单实例,介绍Biztalk应用中调用程序集的方法. 虽然Biztalk Server提供了众多的内置功能,然而在一些情况下可能还需要调用程序集中的函数.因为在.Net程序集中,可以非常方 ...

  4. 如何在.NET中启用程序集绑定失败日志记录(Fusion)

    如何在.NET中启用程序集绑定失败日志记录(Fusion)? #1楼 如果您已经启用了日志记录,并且在Windows 7 64位上仍然出现此错误,请在IIS 7.5中尝试: 创建一个新的应用程序池 转 ...

  5. 无法安装或运行此应用程序。该应用程序要求首先在全局程序集缓存(GAC)中安装程序集

    问题:winform程序发布后,在其它电脑上安装时,弹出"无法安装或运行此应用程序.该应用程序要求首先在"全局程序集缓存(GAC)"中安装程序集" 解决(可能) ...

  6. 无法安装或运行此应用程序。该应用程序要求首先在“全局程序集缓存(GAC)中安装程序集MySQL版本6.7.4”

    1. Problem 无法安装或运行此应用程序.该应用程序要求首先在"全局程序集缓存(GAC)中安装程序集MySQL Data版本6.7.4" 2. Analysis and So ...

  7. 无法安装或运行此应用程序。该应用程序要求首先在“全局程序集缓存(GAC)”中安装程序集stdole版本7.0.3300.0...

    无法安装或运行此应用程序.该应用程序要求首先在"全局程序集缓存(GAC)"中安装程序集stdole版本7.0.3300.0 2011年12月21日 windows系统中目录 win ...

  8. C#中添加程序集引用

    C#中添加程序集引用 当我们复制别人的代码时,往往会在程序的头部using System.*;出现Using指令时不存在的.如图 点击项目--添加引用--在右侧输入框搜索需要引用的名称--点击确定即可 ...

  9. 公共语言运行库中的程序集-04强命名的程序集

    具有强命名的程序集 强命名是由程序集的标识加上公钥和数字签名组成的.其中,程序集的标识包括简单文本名称.版本号和区域性信息(如果提供的话).强命名是使用相应的私钥,通过程序集文件(包含程序集清单的文件 ...

最新文章

  1. mysql分表搜索引擎_MySql分库分表总结(转)
  2. msql查询指定日期
  3. @valid 校验_SpringBoot数据校验与优雅处理详解
  4. AngularJS之watch
  5. 一文了解类别型特征的编码方法
  6. 【图解分布式架构】看不懂直接面壁
  7. win7磁盘清理_为什么要清理磁盘碎片,win7电脑怎么清理磁盘碎片
  8. [HTML 5] More about ARIA Relationships
  9. 为什么程序员对旧代码深恶痛绝?
  10. h5球的立体效果_使用HTML5 Canvas 2D直角坐标系实现三维球体效果
  11. 【转】Cowboy 开源 WebSocket 网络库
  12. Android SurfaceView动画(一)
  13. FastRVC功能记录
  14. HashTable Dictionary HashMap
  15. js中的dataset的使用
  16. m3u8视频下载工具
  17. 通达OA2016之进销存管理,为企业开启"精准营收"新模式
  18. [LeetCode] 707.设计链表
  19. Exception thrown from ApplicationListener handling ContextClosedEvent
  20. 含有使字的诗句_古诗含“把”字

热门文章

  1. 2022保研夏令营经验贴(中科大、华科、武大、国防科大、浙大软件、中科院)
  2. 为什么java1.8 hashMap的数据结构是红黑树?
  3. [kotlin]人工智能对话程序
  4. 不到三十行代码,免费看“美剧”
  5. 提高你的Java代码质量吧:不要让类型默默转换
  6. 《2020智慧屏白皮书》重磅发布 华为跨界引领电视行业革新
  7. 【批处理脚本】-2.4-打开命令start(典型应用:微信多开)
  8. 从两个角度谈谈:什么是产品视角
  9. 微信扫一扫(wx.scanQRCode)功能新手可能遇到的问题
  10. 不开方求两点距离的算法