您是第 Web Page Tracking 位访客

水~墨~

昂首阔步,不留一点遗憾!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 强类型程序集

为什么要强类型名称? 主要是防止不同公司起的名字不同,所以要强类型(秘钥)

 

强类型名字=基本信息,版本号,秘钥等信息等

 

1)检查程序集是否强命名:   sn –v  xxx.dll         

 

2)生成秘钥:  sn –p keyPair.snk

 

 

假设类库名字为  common  ,想强类型化,则在  项目的  Properties/AssemblyInfo.cs  最后加上  一句

 

//手动添加秘钥   不加这句就会提醒  不是具有强名称的程序集
[assembly:AssemblyKeyFile("keyPair.snk")]      //将上面生成的 秘钥 keyPair.snk 放到文件夹中

 

 

不是强命名的话,被别的程序引用之后编译会出错,  微软的system 都强类型都强类型了,所以直接访问。

 

2.通过反射获取程序集的信息

 

1)获取除了托管程序集提供的 类似System.xx,之外的dll

static void Main(string[] args)
{
Console.WriteLine("反射-获取System.IO.BinaryReader 中的公共成员,不包括父类的成员");

Assembly a = Assembly.LoadFile(@"C:\Users\ipod\Documents\Visual Studio 2010\Projects\反射\反射\反射\bin\Debug\common.dll"); //system就不用这个了


Type MyType = a.GetType("common.helper");



MemberInfo[] Memberinfoarray = MyType.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);

Console.WriteLine("反射-获取System.IO.BinaryReader公共成员数量:{0}",Memberinfoarray.Length);
Console.WriteLine("反射程序集name",MyType.FullName);


for (int i = 0; i < Memberinfoarray.Length; i++)
{

Console.WriteLine("member[{0}]:{1}",i+1, Memberinfoarray[i].Name+",");



}

Console.ReadLine();





}

 

 

反射获取程序集信息,如果是IsContained方法,则调用此方法。MethodInfo  a,  a.invoke

 

static void Main(string[] args)
{
Console.WriteLine("反射-获取System.IO.BinaryReader 中的公共成员,不包括父类的成员");

Assembly a = Assembly.LoadFile(@"C:\Users\ipod\Documents\Visual Studio 2010\Projects\反射\反射\反射\bin\Debug\common.dll");


Type MyType = a.GetType("common.helper");



MemberInfo[] Memberinfoarray = MyType.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);

Console.WriteLine("反射-获取System.IO.BinaryReader公共成员数量:{0}",Memberinfoarray.Length);
Console.WriteLine("反射程序集name",MyType.FullName);


for (int i = 0; i < Memberinfoarray.Length; i++)
{

Console.WriteLine("member[{0}]:{1}",i+1, Memberinfoarray[i].Name+",");

if (Memberinfoarray[i].Name == "IsContained")
{
Console.WriteLine("如果是 IsContained方法,则 调用方法");


MethodInfo b =MyType.GetMethod(Memberinfoarray[i].Name);
Console.WriteLine(b.Invoke(null, new object[] { "dd", "dd" })); //第一个参数为null,因为是静态方法
return;
}

}


Console.ReadLine();





}

 

 

 

 

2)获取 System.IO 中的成员信息

 

static void Main(string[] args)
{
Console.WriteLine("反射-获取System.IO.BinaryReader 中的公共成员,不包括父类的成员");




Type MyType = a.GetType("System.IO");



MemberInfo[] Memberinfoarray = MyType.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);

Console.WriteLine("反射-获取System.IO.BinaryReader公共成员数量:{0}",Memberinfoarray.Length);
Console.WriteLine("反射程序集name",MyType.FullName);


for (int i = 0; i < Memberinfoarray.Length; i++)
{

Console.WriteLine("member[{0}]:{1}",i+1, Memberinfoarray[i].Name+",");



}

Console.ReadLine();





}

posted on 2013-03-09 20:37  水墨.MR.H  阅读(196)  评论(0编辑  收藏  举报
知识共享许可协议
本博客为水墨原创,基于Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的水墨(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。