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 是非常轻松 ...
随机推荐
- oracle 创建一个用户,并且设定只能访问指定的对象
出处:http://www.cnblogs.com/BetterWF/archive/2012/07/03/2574416.html 今天在开发接口时候,需要给接口开发公司提供一个ORACLE 用户, ...
- C语言学习笔记(三) 输入输出函数的基本用法以及运算符
printf() ——将内容输出到显示器上 四种用法 1.printf("字符串"); 直接输出字符串 2.printf("输出控制符",输出参数); 3. ...
- CentOS 加载/挂载光驱
1.mkdir /mnt/cdrom 2.mount /dev/cdrom /mnt/cdrom 3.挂载 umount /dev/cdrom /mnt/cdrom
- Netty(一):初识Netty
Netty是什么? Netty是由JBOSS提供的一个java开源框架. Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 封装了JDK底 ...
- C++语言基础(2)-new和delete操作符
在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数.如下所示: ); //分配10个int型的内存空间 free(p); //释放内存 在C++中,这两个函数仍然可以使 ...
- android.app.Service-android:process=":remote"属性解说
在学习Android Service组件的过程中碰到了一个问题,就是在Android应用的声明文件Manifest.xml中有时候会对相关的服务标签设置一个android:process=”:remo ...
- HTML5 Canvas绘图详解 drawImage() 方法 有图有真相!
步骤 1 2 3 4 5 简介 是一个新的HTML元素,这个元素可以被Script语言(通常是JavaScript)用来绘制图形.例如可以用它来画图.合成图象.或做简单的(和不那么简单的)动画. ...
- size_t ssize_t loff_t 的区别
Ssize_t 与size_t 跟踪linux源码得到以下宏: #ifndef _SIZE_T #define _SIZE_T typedef __kernel_size_t size ...
- 第一百九十九节,jQuery EasyUI,Panel(面板)组件
jQuery EasyUI,Panel(面板)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解EasyUI中Panel(面板)组件的使用方法,这个组件不依赖于其 ...
- Spring4 MVC ContentNegotiatingViewResolver多种输出格式实例
本文演示支持多种输出格式,这里 Spring4 MVC应用程序使用了 Spring ContentNegotiatingViewResolver .我们将生成应用程序输出XML,JSON,PDF,XL ...