当前位置: 首页 > news >正文

C#中程序集的详解一

程序集(Assembly)是 .NET 平台中的一个重要概念,它是代码和资源的逻辑单元,也是应用程序的部署、版本控制和安全权限的最小单位。下面详细介绍其定义和常见用法:

1. 程序集的定义

程序集是 .NET 应用程序的构建块,通常表现为 DLL(动态链接库)或 EXE(可执行文件)文件。它包含以下内容:

  • IL 代码:中间语言(Intermediate Language),是 .NET 代码编译后的中间形式,需要 JIT(即时编译)转换为机器码。
  • 元数据:描述程序集中类型、成员、引用关系等信息的数据。
  • 资源文件:图标、图像、字符串等非代码资源。
  • 清单:程序集的元数据,包括版本号、依赖项、标识信息等。

2. 程序集的主要用法

(1)模块化开发

程序集允许将代码分割为独立的功能模块,便于团队协作和代码复用。例如:

// MathLibrary.dll
public class Calculator {public static int Add(int a, int b) => a + b;
}// MainApp.exe
var result = Calculator.Add(1, 2); // 引用 MathLibrary.dll
(2)版本控制

程序集通过 AssemblyVersion 特性实现版本管理,格式为 主版本.次版本.构建号.修订号(如 1.0.0.0)。这有助于解决 DLL 地狱问题:

[assembly: AssemblyVersion("1.0.0.0")]
(3)运行时加载

程序集可以在运行时动态加载(如插件系统),使用 Assembly.Load 方法:

Assembly pluginAssembly = Assembly.LoadFrom("Plugin.dll");
Type pluginType = pluginAssembly.GetType("MyPlugin.MyClass");
(4)资源管理

程序集可以包含嵌入式资源(如图片、配置文件),通过 ResourceManager 访问:

// 嵌入资源:Resources/logo.png
var resourceManager = new ResourceManager("MyApp.Resources", this.GetType().Assembly);
var logo = resourceManager.GetObject("logo");
(5)安全权限

程序集可以基于其来源(如 Internet、本地硬盘)授予不同的安全权限,通过 Evidence 对象实现。

(6)多语言互操作性

不同 .NET 语言(C#、VB.NET、F#)编译的程序集可以互相引用,因为它们共享相同的 IL 和运行时。

3. 程序集的分类

  • 私有程序集:随应用程序部署,仅供单个应用使用。
  • 共享程序集:安装在全局程序集缓存(GAC)中,多个应用共享。
  • 卫星程序集:专门用于存储本地化资源的程序集。

4. 常用工具

  • ILDASM:查看程序集的 IL 代码和元数据。
  • GACUTIL:管理全局程序集缓存。
  • Assembly Binding Log Viewer:诊断程序集加载问题。

示例:创建和引用程序集

(1)创建类库(ClassLibrary.dll)
// ClassLibrary/MyClass.cs
namespace ClassLibrary {public class MyClass {public static string GetMessage() => "Hello from ClassLibrary!";}
}
(2)在应用程序中引用
// Program.cs
using ClassLibrary;var message = MyClass.GetMessage();
Console.WriteLine(message); // 输出:Hello from ClassLibrary!

总结

程序集是 .NET 平台的核心机制,提供了代码组织、版本控制、资源管理和安全隔离的能力,是构建大型应用和组件化系统的基础。

 

 

 

相关文章:

  • 搭建高可用及负载均衡的Redis
  • 单片机ESP32天气日历闹铃语音播报
  • 供应链学习
  • 《AI大模型应知应会100篇》第60篇:Pinecone 与 Milvus,向量数据库在大模型应用中的作用
  • Java大师成长计划之第20天:Spring Framework基础
  • java----------->代理模式
  • 专业课复习笔记 8
  • 【SSM-SSM整合】将Spring、SpringMVC、Mybatis三者进行整合;本文阐述了几个核心原理知识点,附带对应的源码以及描述解析
  • pdf 不是扫描件,但却无法搜索关键词【问题尝试解决未果记录】
  • Java中堆栈
  • 一个极简单的 VUE3 + Element-Plus 查询表单展开收起功能组件
  • 基于HTTP头部字段的SQL注入:SQLi-labs第17-20关
  • spring中的@PropertySource注解详解
  • 记录裁员后的半年前端求职经历
  • 【氮化镓】GaN在不同电子能量损失的SHI辐射下的损伤
  • 歌曲《忘尘谷》基于C语言的歌曲调性检测技术解析
  • Linux常用命令详解(下):打包压缩、文本编辑与查找命令
  • Codeforces Round 1024 (Div. 2)(A-D)
  • 五、Hive表类型、分区及数据加载
  • [Java][Leetcode simple] 189. 轮转数组
  • 支持企业增强战略敏捷更好发展,上海市领导密集走访外贸外资企业
  • 国羽用冠军开启奥运周期,林丹:希望洛杉矶奥运取得更好成绩
  • 中美发布日内瓦经贸会谈联合声明达成关税共识,外交部回应
  • 文学花边|对话《借命而生》原著作者石一枫:我给剧打90分
  • 国内首例侵入式脑机接口系统前瞻性临床试验:受试者已能用意念玩游戏
  • 技术派|巴基斯坦导弹:让印度保持克制的“定海神针”?