C#中的Assembly 版本的问题

本文记录了解决C#控制台应用程序中IBatis.NET与Mysql.Data.dll版本冲突的过程。通过调整配置文件,成功使程序引用了正确的数据库驱动版本。
写了一个简单的C#的Console Application想测试一下IBatis.Net 的一些东西。使用的是Mysql数据库,开始下载了一个MySql.Data.dll,是1.0版本的,是OK的。后来下载了一个新的Mysql.Data,是5.0的,发现启动我的Console程序的时候总是还会找那个1.0的,提示什么与预绑定信息就是1.0的,我就晕掉了。百思不得其解。我说C#写程序更新一个外部的包不会如此困难吧。搞了两三天,也在优快云上还有M$的论坛上问。都没有结果。后来自己发现原来这个版本是在IBatis.Net的providers.confg写死的。真是ft啊ft。问题解决了。还好没有花太多的时间,不过也郁闷了我两天了。现在总是遇到这样非技术性的问题。呵呵。还是C,C++好啊。
<think> 根据用户当前的问题C#assembly”,用户可能是在询问关于C#程序集(Assembly)的基本概念或相关操作。 在之前的对话历史中,用户关注过shell脚本的问题,但本次问题转向了C#。因此,我们需要围绕C#中的程序集进行回答。 程序集(Assembly)是.NET应用程序的构建块,它包含编译后的代码(MSIL)、元数据(类型信息)、资源文件(如图片)和程序集清单(名称、版本等)。程序集可以是可执行的(.exe)或库文件(.dll),并支持版本控制、安全权限和部署。 关键点: 1. **程序集类型**:EXE(可执行文件)和DLL(类库)。 2. **组成**:包含清单、类型元数据、MSIL代码和资源。 3. **作用**:部署单元、版本控制单元、安全边界、类型边界。 示例:创建和使用类库 ```csharp // 定义类库 (MyLibrary.dll) public class Calculator { public int Add(int a, int b) => a + b; } // 主程序引用MyLibrary.dll class Program { static void Main() { var calc = new Calculator(); Console.WriteLine(calc.Add(3, 5)); // 输出8 } } ``` 相关问题应围绕程序集的概念、使用、管理等方面提出。 §§相关问题§§ 1. 如何在C#项目中引用另一个程序集(DLL)? 2. 程序集清单(Assembly Manifest)包含哪些关键信息? 3. 什么是强名称程序集(Strongly Named Assembly)?如何创建? 4. 如何查看程序集的版本和依赖关系? 5. 在C#中,如何动态加载程序集(如使用Assembly.LoadFrom)? </think>在 C# 中,**程序集(Assembly)** 是 .NET 应用程序的基本构建单元,包含编译后的代码、元数据、资源文件和程序集清单。程序集可以是可执行文件(`.exe`)或类库(`.dll`),主要功能包括: 1. **代码封装** 编译后的中间语言(IL)代码,由 CLR(公共语言运行时)执行。 2. **元数据存储** 包含类型定义、成员信息和程序集依赖关系(通过反射可读取)。 3. **版本控制** 程序集清单(Assembly Manifest)记录名称、版本、文化等标识信息: ```csharp // 获取当前程序集版本 var version = Assembly.GetExecutingAssembly().GetName().Version; Console.WriteLine($"版本: {version}"); // 输出如 1.0.0.0 ``` 4. **安全边界** 定义代码访问安全(CAS)权限的作用域。 5. **部署单元** 支持私有部署(复制到应用目录)或全局部署(安装到 GAC)。 --- ### 关键操作示例 #### 动态加载程序集 ```csharp // 加载程序集并实例化类型 var assembly = Assembly.LoadFrom("MyLibrary.dll"); var type = assembly.GetType("MyLibrary.Calculator"); dynamic instance = Activator.CreateInstance(type); Console.WriteLine(instance.Add(2, 3)); // 调用方法 ``` #### 读取程序集属性 ```csharp // 获取程序集元数据 var attributes = Assembly.GetExecutingAssembly() .GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); var description = ((AssemblyDescriptionAttribute)attributes[0]).Description; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值