总目录 前言 在C#开发中,程序集的加载是运行时一个关键环节。
Assembly.Load
、
Assembly.LoadFrom
和
Assembly.LoadFile
是三种常用的程序集加载方法,它们在加载方式、依赖处理及加载上下文方面存在显著差异。
本文将详细解析这三种加载方法。
一、概览 方法加载方式依赖项处理路径/版本控制文件锁定适用场景
Assembly.Load通过程序集的全名(含名称、版本、公钥等)加载。自动加载依赖项。遵循 CLR 加载策略(先 GAC,再配置文件,最后应用目录)。不锁定文件常规场景,需精确版本控制或依赖项自动加载。Assembly.LoadFrom通过文件路径加载,支持从本地路径或 URL 加载。自动加载依赖项。不允许加载同名但不同路径/版本的程序集(返回首次加载的版本)。锁定文件需要通过路径加载程序集并依赖其引用的其他程序集,但需注意版本冲突。Assembly.LoadFile通过绝对路径直接加载指定文件。不加载依赖项(需手动处理)。允许加载同名但不同路径/版本的程序集(每次路径不同则视为新实例)。锁定文件需要加载特定路径的程序集且无需依赖项,或需多版本并存。但需注意文件锁定问题。
二、GAC:全局程序集缓存 1. 简介 GAC 是 .NET Framework 中用于存储共享程序集的一个特殊位置。
它允许在系统范围内多个应用程序共享同一个程序集,而无需将该程序集复制到每个应用程序的目录下。
2. GAC 的核心概念 全局可用性 :GAC 中的程序集可以被系统上的任何 .NET 应用程序访问。
版本控制 :支持同一名称的不同版本程序集并存,避免了不同应用程序对相同程序集版本的需求冲突。
强名称签名 :只有经过强名称签名的程序集才能安装到 GAC 中,以确保程序集的唯一性和完整性。
3. GAC 的用途 GAC 主要用于以下几个方面: 共享程序集 : 多个应用程序可以共享同一个程序集,减少磁盘空间占用,并且简化更新和维护工作。
版本管理 : 支持在同一系统中同时存在多个版本的同名程序集,确保不同应用程序可以使用各自需要的特定版本。
例如,应用 A 可以使用
MyLibrary.dll
版本 1.0,而应用 B 可以使用
MyLibrary.dll
版本 2.0。
安全性 : 强名称签名机制保证了程序集的来源可靠,并防止未经授权的修改。
确保程序集在传输和存储过程中未被篡改。
部署灵活性 : 开发者可以通过简单的命令或工具将程序集安装到 GAC 中,便于集中管理和分发。
卸载时也可以通过相应命令从 GAC 中移除程序集。
4. 如何使用 GAC 1)安装程序集到 GAC 要将一个程序集安装到 GAC,必须先对其进行强名称签名。
然后可以使用
gacutil.exe
工具进行安装。
gacutil -i MyLibrary.dll
上述命令会将
