C#反射 程序域
1:加载dll到当前应用程序域:
public static void LoadAllAssembly(string bindir) //bindir是dll所在的完整路径 {
List<Assembly> _lst = new List<Assembly>(AppDomain.CurrentDomain.GetAssemblies());
List<string> filelist = new List<string>(System.IO.Directory.GetFiles(bindir, "*.dll"));
//filelist.AddRange(System.IO.Directory.GetFiles(bindir, "*.exe")); //如果需要也加载exe的话,取消注释
for (int i = ; i < filelist.Count; i++)
{
string f = filelist[i];
f = Path.GetFileName(f).ToLower();
if (f.StartsWith("interop.") || f.Contains(".vshost.exe"))
continue;
if (!f.EndsWith(".dll") && !f.EndsWith(".exe"))
continue;
try
{
if (!CheckAssemblyLoaded(_lst, filelist[i]))
_lst.Add(Assembly.LoadFrom(filelist[i]));
}
catch (Exception ex)
{
Console.WriteLine("[" + DateTime.Now.ToShortTimeString() + "] " + ex.Message);
//ErrorMessage.ErrorMessage.Show(ex);
}
}
} private static bool CheckAssemblyLoaded(List<Assembly> list, string filename)
{
if (string.IsNullOrEmpty(filename) || list == null || list.Count == )
return false;
try
{
filename = filename.ToLower();
for (int i = ; i < list.Count; i++)
{
if (Path.GetFileName(list[i].Location).ToLower() == filename)
return true;
}
}
catch (Exception ex)
{
Console.WriteLine("[" + DateTime.Now.ToShortTimeString() + "] " + ex.Message);
return false;
}
return false;
}
2:根据类的全名遍历所有appdomain中的程序集,取得相应的类型
private static Dictionary<string, Type> _typeList = new Dictionary<string, Type>(); /// <summary>
/// 根据类的全面获取类型,将在当前AppDomain中的所有加载的程序集中查找
/// </summary>
/// <param name="fullname">类型的Fullname</param>
/// <returns>类型,若不存在返回null</returns> public static Type GetType(string fullname)
{
if (fullname == null)
return null;
if (_typeList.ContainsKey(fullname))
return _typeList[fullname];
if (!string.IsNullOrEmpty(fullname))
{
Assembly[] a = AppDomain.CurrentDomain.GetAssemblies();
for (int i = ; i < a.Length; i++)
{
Type t = a[i].GetType(fullname);
if (t != null)
{
_typeList.Add(fullname, t);
return t;
}
}
}
return null;
}
C#反射 程序域的更多相关文章
- as3 Loader程序域
Loader的 load方法有两个参数 第二个参数是LoaderContext对象 LoaderContext对象里有一个applicationDomain( 程序 域)对象 设置程序域对象可以设置两 ...
- lambda+mutable配合move实现单函数多程序域
主代码 //-----------------------------------说明一的代码 void fun0{ int t = 10; auto loopFun = [=]() mutable{ ...
- C#中查找或结束程序域中的主、子进程
有时候,我们的程序需要启动一些子进程,如嵌入的图形程序. 当启动一个进程后,获得这个进程信息Process,然后其内部在某个时刻启动了一个子进程,这个时候就涉及程序域和进程树的概念.当我们通过非正常操 ...
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)2----通过应用程序域AppDomain加载和卸载程序集之后,如何再返回原来的主程序域
实现目的:动态加载dll,执行完毕之后可以随时卸载掉,并可以替换这些dll,以在运行中更新dll中的类. 其实就是通过应用程序域AppDomain加载和卸载程序集. 在这方面微软有篇文章http:// ...
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)6-----在不卸载程序域的前提下替换程序集文件。
当某个程序集文件被载入AppDomain,该文件在AppDomain.Unload之前是不能被替换和删除的.使用AppDomainSetup的影像复制功能可以实现在不卸载程序的情况下替换或者删除程序集 ...
- as3 程序域
问题我要在应用程序中载入其他域的swf文件,并且允许它访问程序中的 ActionScript 解决办法使用flash.system.Security.allowDomain( ), flash.sys ...
- C#4.0图解教程 - 第24章 反射和特性 - 1.反射
24.1 元数据和反射 有关程序及类型的数据被成为 元数据.他们保存在程序集中. 程序运行时,可以查看其他程序集或其本身的元数据.一个运行的程序查看本身元数据或其他程序的元数据的行为叫做 反射. 24 ...
- .net学习之泛型、程序集和反射
一.泛型1.CLR编译时,编译器只为MyList<T>类型产生“泛型版”的IL代码——并不进行泛型的实例化,T在中间只充当占位符.例如:MyList 类型元数据中显示的<T> ...
- 仅反射加载(ReflectionOnlyLoadFrom)的 .NET 程序集,如何反射获取它的 Attribute 元数据呢?
原文:仅反射加载(ReflectionOnlyLoadFrom)的 .NET 程序集,如何反射获取它的 Attribute 元数据呢? 平时我们获取一个程序集或者类型的 Attribute 是非常轻松 ...
随机推荐
- spring启动加载过程源码分析
我们知道启动spring容器两常见的两种方式(其实都是加载spring容器的xml配置文件时启动的): 1.在应用程序下加载 ApplicationContext ctx = new ClassPat ...
- MySQL Memory 存储引擎浅析
原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 前言 需求源自项目中的MemCache需求,開始想用MemCached(官方网站:http://memcac ...
- 10张思维导图带你学习【JavaScript】
思维导图小tips:思维导图又叫心智图.是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的技巧.把各级主题的关系用相互隶属与相关的层级图表现出来 ...
- android studio - 隐藏编辑器上面的导航条
菜单栏-“View”-"Navigation Bar"
- 李洪强经典面试题47--UNIX常用命令
可能碰到的iOS笔试面试题(3)--UNIX常用命令 做开发说用不到命令行,那肯定是不可能的.所以记住几个常用的命令还是很有用. cd 改变工作目录 pwd 输出当前工作目录的绝对路径在UNIX中要执 ...
- codeforces #363a Launch of Collider
A. Launch of Collider time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- OpenAPI初体验
问题的一开始源于客户和服务部门抱怨我的REST API文档写得不好,然后又了解到 django rest framework 利用 coreapi 能自动生成文档,再就是看到 swagger.io 上 ...
- 不再为无限级树结构烦恼,且看此篇s
很久都没有写点什么出来分享了,最近在做多级树的时候,发现来来回回写过很多遍,于是封装成用户控件,以方便日后重复使用. 首先上效果: 我们看到以上2种效果,都是支持任意级的,这里源码中使用的是递归,以便 ...
- 用jquery替换dojo中的ajax
function getpoints(closeid) {/*获取数据列表*/ var closesid = closeid; $.ajax({ url:'*.ashx") %>?op ...
- mySQL 开启事件存储过程
怎样在Navicat中设置,是数据库按照记录中的日期更新状态字段 其实这个很常用,比如你网站里的某条记录的日期——比如说数据库中某条活动记录的审核日期字段已经过期,亦即当前时间已经超过审核日期,那么定 ...