.NET中的程序集(Assembly)是什么?如何理解强名称和GAC?

小老鼠
发布: 2025-11-22 18:15:09
原创
620人浏览过
程序集是.NET应用的基本单元,包含IL代码、元数据、清单和资源,支持部署、版本控制与安全;强名称通过公钥、版本等信息唯一标识程序集并确保完整性;GAC存储共享程序集,避免DLL冲突,实现多版本共存。

.net中的程序集(assembly)是什么?如何理解强名称和gac?

.NET中的程序集(Assembly)是应用程序的基本构建单元,它包含编译后的代码(通常是IL指令)、类型元数据、资源以及版本和安全信息。程序集可以是一个可执行文件(.exe)或动态链接库(.dll),但它不仅仅是文件,更是一个逻辑功能单元,用于部署、版本控制、安全性和类型管理。

程序集的作用与组成

程序集不仅仅封装了代码,还提供了自描述能力。它内部包含:

  • IL代码:由C#等语言编译生成的中间语言指令
  • 元数据:描述程序集中定义的类型、方法、字段等信息
  • 清单(Manifest):记录程序集自身的信息,如名称、版本、文化、依赖项及所含文件列表
  • 资源:如图标、字符串、配置文件等嵌入内容

程序集是.NET中类型隔离的基础,不同程序集中的同名类型被视为不同的类型。CLR通过程序集加载并验证代码,实现运行时的安全与版本管理。

强名称(Strong Name)是什么?

强名称用于唯一标识一个程序集,防止名称冲突,并确保程序集的完整性和来源可信。一个强名称包括:

  • 程序集的简单名称(如MyLibrary)
  • 版本号(如1.0.0.0)
  • 可选的文化信息(如en-us)
  • 公钥数字签名

使用强名称的过程是:开发者用私钥对程序集进行签名,生成哈希值并加密;在加载时,CLR用对应的公钥验证签名是否被篡改。这保证了程序集未被非法修改,也支持GAC中多个同名但不同版本的程序集共存。

ClipDrop
ClipDrop

Stability.AI出品的图片处理系列工具(背景移除、图片放大、打光)

ClipDrop 112
查看详情 ClipDrop
注意:强名称不提供代码来源认证(不像数字证书),它只保证完整性与唯一性。

GAC(全局程序集缓存)的作用

GAC是系统级的程序集存储位置,通常位于C:\Windows\AssemblyC:\Windows\Microsoft.NET\assembly。它的主要用途是存放被多个应用程序共享的程序集。

放入GAC的程序集必须具有强名称,这样才能确保版本唯一、避免“DLL地狱”问题。

  • 多个应用可引用同一个GAC中的程序集,节省内存和磁盘空间
  • 支持并行执行不同版本的同一程序集(Side-by-Side Execution)
  • 可通过工具gacutil或PowerShell命令安装/卸载程序集

例如,当你开发一个公司通用的日志组件,并希望所有项目都能引用相同版本时,将其签名后安装到GAC是一个合理选择。

基本上就这些。程序集是.NET的核心部署单位,强名称保障其唯一与安全,GAC则提供共享机制。理解它们有助于更好地管理依赖、版本和部署策略。

以上就是.NET中的程序集(Assembly)是什么?如何理解强名称和GAC?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号