利用AssemblyResolve事件加载任意位置的程序集
来源:互联网 发布:heatmap制作软件 编辑:程序博客网 时间:2024/06/05 21:26
随着项目规模的逐渐扩大,项目引用的dll也越来越多,这些dll默认情况下全部都需要放在跟主程序相同的目录下,dll一多,主程序的目录就会显得非常凌乱。那么有没有什么办法可以把dll放到其他目录下也能正确加载呢,答案是肯定的,就是利用AppDomain的AssemblyResolve事件。
AssemblyResolve事件在.Net对程序集的解析失败时触发,返回一个Assembly对象。因此,我们只要在这个事件的处理程序里手动加载对应目录的dll,并把对应dll的Assembly对象返回,.Net就能正确加载对应的dll了。使用AssemblyResolve事件除了本文介绍的,能在任意目录加载程序集外,应该还可以从其他特殊的地方加载程序集,例如数据库、网络服务器、加密文件等,就交给各位读者研究了。
AssemblyResolve事件在.Net对程序集的解析失败时触发,返回一个Assembly对象。因此,我们只要在这个事件的处理程序里手动加载对应目录的dll,并把对应dll的Assembly对象返回,.Net就能正确加载对应的dll了。使用AssemblyResolve事件除了本文介绍的,能在任意目录加载程序集外,应该还可以从其他特殊的地方加载程序集,例如数据库、网络服务器、加密文件等,就交给各位读者研究了。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using TestLibrary;using System.Reflection;using System.IO;namespace CustomLoadAssemblyDemo{ class Program { static void Main(string[] args) { AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); Test(); } static void Test() { //Class1为另一个dll里的类,运行时把这个dll放到dll子目录里。 Class1 c1 = new Class1(); Console.WriteLine(c1.ToString()); } static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { AssemblyName assemblyName = new AssemblyName(args.Name); return Assembly .LoadFrom(Path.Combine( "dll", assemblyName.Name + ".dll" )); } }}
- 利用AssemblyResolve事件加载任意位置的程序集
- 关于动态加载的页面实现任意位置拖动
- com.typesafe.config加载任意位置的配置文件
- GridViewRow可以任意位置单击引发事件的方法
- GridViewRow可以任意位置单击引发事件的方法
- GridViewRow可以任意位置单击引发事件的方法
- 利用URLClassLoader加载两个位置的Class
- VC++自定义加载DLL,从任意位置加载依赖的DLL
- 从任意位置加载XML布局
- 获取winform任意位置点击事件
- C# WinForm窗体任意位置点击事件
- 程序清单-利用反射扩展任意类型的数组
- windows把任意程序加载到右键菜单的方法
- scrollview任意位置的定位
- 自定义类加载器,利用反射加载任意路径下的class文件
- Android中ListView的item实现点击任意位置都触发事件
- 如何利用WinDbg找出程序崩溃的位置
- 如何利用WinDbg找出程序崩溃的位置
- 内存分析
- 二叉树建立的基本思路
- 如何让你的SQL运行得更快
- Spring学习笔记 Hello World
- android TraceView 使用方法搜集
- 利用AssemblyResolve事件加载任意位置的程序集
- HDU3732 "假的01背包"
- 黑马程序员---Java基础--02天
- WKID与WKT含义
- C++中的作用域解析运算符::
- vc6.0 执行应用程序正常初始化(0xc0150002)失败 解决办法
- tftp中Access Violation错误
- 00000000
- wifi移植(下)