最近研究Silverlight的反射技术,找了很多的资料,很多都不适用,终于在本人的不懈努力下,弄出了一点成果,与大家分享一下。
Silverlight实现反射的方法很简单,使用IO流 + 反射,可以轻松的将dll解析,下面是我自己写的一点代码:
1.添加引用using System.Reflection; using System.IO;
2.实现:
string assemblyName = @"E:\Work\Test\LogInfoTest\ZKR.Silverlight.Core\Bin\Debug\ZKR.Silverlight.Core.dll"; //文件路径
FileStream fs = new FileStream(assemblyName, FileMode.Open, FileAccess.Read); //将文件转化为Stream
AssemblyPart part = new AssemblyPart(); //实例化AssemblyPart对象
Assembly assembly = part.Load(fs); //加载文件的Stream
fs.Close(); //关闭Stream
Type[] ts = assembly.GetExportedTypes(); //获取文件的基本信息
foreach (Type item in ts)
{
string NameSpace = item.Namespace; //命名空间
string Name = item.Name; //类名
MemberInfo[] mi = item.GetMethods(); //获取全部的信息
foreach (MemberInfo MiItem in mi)
{
string s = MiItem.Name;
switch (MiItem.MemberType)
{
case MemberTypes.Event: //事件
break;
case MemberTypes.Field: //字段
break;
case MemberTypes.Method: //方法
break;
case MemberTypes.Property: //属性
break;
default:
break;
}
}
}
这样的方法似乎可以解析任意的dll,但是实际上是不是这样,还不是很确定,如果大家有什么新的发现,希望能分享一下!