### C#中通过Assembly类访问程序集信息 在.NET框架中,程序集是部署、版本控制、安全性以及重用的基本单元。程序集包含了编译后的代码(中间语言IL)及元数据,它由一个或多个模块组成。在C#中,`Assembly`类提供了丰富的API来访问和操作程序集的信息。 #### 允许访问给定程序集的元元素 通过`Assembly`类可以访问给定程序集的各种元数据信息,包括但不限于类型、方法、字段等。这些元数据对于理解程序集结构至关重要,也是反射编程的基础之一。 #### 加载程序集 程序集可以通过两种主要方式加载: 1. **静态方法Assembly.Load(程序集名称)**:此方法允许通过传递程序集的名称来加载程序集。该名称通常包括了程序集的强名称信息,如名称、版本号、公钥令牌和文化标识符。例如: ```csharp Assembly.Load("mscorlib"); ``` 2. **静态方法Assembly.LoadFrom(程序集完整路径名)**:此方法允许通过提供程序集的完整文件路径来加载程序集。这种方法更加灵活,因为它可以直接从文件系统加载程序集,而不必依赖于全局程序集缓存(GAC)。例如: ```csharp Assembly.LoadFrom(@"E:\CODE\dotNet\C#\9-Reflection\TestCustomAttributes.dll"); ``` #### 属性 - **FullName**:程序集的完全限定名称。它包含了程序集的所有相关信息,如名称、版本、公钥令牌和文化标识符。这是一个非常重要的属性,可以用于唯一标识一个程序集。例如: ```csharp Console.WriteLine(assembly.FullName); ``` #### 方法 - **GetTypes()**:获取程序集中定义的所有公共类型。这些类型包括所有公共类、结构、枚举、委托等。这对于反射编程非常重要,因为你可以利用这些类型信息来创建实例、调用方法等。例如: ```csharp Type[] types = assembly.GetTypes(); foreach (Type t in types) { Console.WriteLine(t.FullName); } ``` ### 示例代码解析 以下是对示例代码中的关键部分进行的详细解释: ```csharp using System; using System.Reflection; namespace Magic.Test.Reflection { public class TestAssembly { public static void Main() { // 将程序集加载到运行时 Assembly ass = Assembly.Load("TestCustomAttributes"); Assembly ass1 = Assembly.LoadFrom(@"E:\CODE\dotNet\C#\9-Reflection\TestCustomAttributes.dll"); // 获取程序集的完全限定名称 Console.WriteLine(ass1.FullName); // 获取程序集中定义的类型 Type[] types = ass.GetTypes(); foreach (Type t in types) { Console.WriteLine(t.FullName); } } } } ``` 1. **加载程序集**: - 使用`Assembly.Load`方法通过程序集名称加载。 - 使用`Assembly.LoadFrom`方法通过程序集的完整路径加载。 2. **访问程序集信息**: - 通过`FullName`属性获取程序集的完全限定名称。 - 通过`GetTypes()`方法获取程序集中定义的所有类型。 通过这种方式,开发人员可以在运行时动态地加载和使用其他程序集中的类型,从而实现更高级别的灵活性和可扩展性。这在许多场景中都是非常有用的,比如插件架构、配置驱动的应用程序等。
- 粉丝: 5
- 资源: 78
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助