跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

C# 动态加载程序集的三种方式

总目录 前言 在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

上述命令会将

相关文章