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#反射 程序域的更多相关文章

  1. as3 Loader程序域

    Loader的 load方法有两个参数 第二个参数是LoaderContext对象 LoaderContext对象里有一个applicationDomain( 程序 域)对象 设置程序域对象可以设置两 ...

  2. lambda+mutable配合move实现单函数多程序域

    主代码 //-----------------------------------说明一的代码 void fun0{ int t = 10; auto loopFun = [=]() mutable{ ...

  3. C#中查找或结束程序域中的主、子进程

    有时候,我们的程序需要启动一些子进程,如嵌入的图形程序. 当启动一个进程后,获得这个进程信息Process,然后其内部在某个时刻启动了一个子进程,这个时候就涉及程序域和进程树的概念.当我们通过非正常操 ...

  4. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)2----通过应用程序域AppDomain加载和卸载程序集之后,如何再返回原来的主程序域

    实现目的:动态加载dll,执行完毕之后可以随时卸载掉,并可以替换这些dll,以在运行中更新dll中的类. 其实就是通过应用程序域AppDomain加载和卸载程序集. 在这方面微软有篇文章http:// ...

  5. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)6-----在不卸载程序域的前提下替换程序集文件。

    当某个程序集文件被载入AppDomain,该文件在AppDomain.Unload之前是不能被替换和删除的.使用AppDomainSetup的影像复制功能可以实现在不卸载程序的情况下替换或者删除程序集 ...

  6. as3 程序域

    问题我要在应用程序中载入其他域的swf文件,并且允许它访问程序中的 ActionScript 解决办法使用flash.system.Security.allowDomain( ), flash.sys ...

  7. C#4.0图解教程 - 第24章 反射和特性 - 1.反射

    24.1 元数据和反射 有关程序及类型的数据被成为 元数据.他们保存在程序集中. 程序运行时,可以查看其他程序集或其本身的元数据.一个运行的程序查看本身元数据或其他程序的元数据的行为叫做 反射. 24 ...

  8. .net学习之泛型、程序集和反射

    一.泛型1.CLR编译时,编译器只为MyList<T>类型产生“泛型版”的IL代码——并不进行泛型的实例化,T在中间只充当占位符.例如:MyList 类型元数据中显示的<T> ...

  9. 仅反射加载(ReflectionOnlyLoadFrom)的 .NET 程序集,如何反射获取它的 Attribute 元数据呢?

    原文:仅反射加载(ReflectionOnlyLoadFrom)的 .NET 程序集,如何反射获取它的 Attribute 元数据呢? 平时我们获取一个程序集或者类型的 Attribute 是非常轻松 ...

随机推荐

  1. EXTJS4自学手册——组合图像

    Ext.create('Ext.panel.Panel', { title: '组合图像', renderTo: 'ComplexDiagram', items: [{ xtype: 'button' ...

  2. CoolHash数据库引擎压测对比报告

    Coolhash 当前性能指标:读写吞吐量超过百万,千万级别查询1秒完成,连续48小时打满CPU强压力运行稳定.redis官方公布读写性能在10万 tps,leveldb官方公布写性能在40万tps, ...

  3. lucene: nDocs must be > 0查询异常解决

    nDocs must be > 0     // 函数search(query,filter,n),其中query是查询条件,filter是过滤器,n查询数量,异常消息意思就是n参数的值必须大于 ...

  4. Eclipse安装Properties Editore插件

    Properties Editor for Eclipse3[1].0-3.2安装使用-http://jzgl-javaeye.iteye.com/blog/386010 PropertiesEdit ...

  5. chrome扩展(浏览器插件)开发实用教程

    原创文章,转载请注明出处. 作者:简体字丶冯; QQ:564372931 1.Chrome能搞这些事情 (1)     操作浏览器中打开的页面DOM 这能做什么哪?譬如说你想修改页面DOM(DOM是什 ...

  6. MySQL中的RAND()函数使用详解(order by rand() 随机查询取前几条记录)

    MySQL RAND()函数调用可以在0和1之间产生一个随机数: mysql> SELECT RAND( ), RAND( ), RAND( ); +------------------+--- ...

  7. js Json操作

    JSON字符串: var jsonStr='{"fname":"json","fage":1}' JSON对象:    var jsonOb ...

  8. atitit.极光消息推送服务器端开发实现推送  jpush v3. 总结o7p

    atitit.极光消息推送服务器端开发实现推送  jpush v3. 总结o7p 1. 推送所设计到底功能1 1.1. 内容压缩1 1.2. 多引擎1 2. reg  ,设置appkey and pw ...

  9. EFM8单片机与I2C外设通信

    近期帮同学做一个项目,开发板是EFM8单片机,支持SPI和I2C协议(SMBus).非常久没搞过单片机了,并且条件限制,为了使单片机和外设成功通信.花了一个星期时间.刚開始使用SPI.发现代码逻辑都没 ...

  10. MySQL:cannot allocate the memory for the buffer pool

    InnoDB: The InnoDB memory heap is disabled InnoDB: Mutexes and rw_locks use GCC atomic builtins Inno ...