Chinaunix首页 | 论坛 | 博客
  • 博客访问: 974739
  • 博文数量: 78
  • 博客积分: 1473
  • 博客等级: 上尉
  • 技术积分: 2124
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-23 12:50
文章分类

全部博文(78)

文章存档

2016年(6)

2015年(2)

2014年(13)

2013年(4)

2012年(53)

分类: 嵌入式

2012-06-24 11:14:03

 

引用强名称程序集的过程对我们来说都是透明的,无需做额外的工作。可以通过这种方式来检验强名称程序集的作用。

首先创建一个类库项目StrongNameReferenceLib,对其进行强名称签名。

 

 

9-16引用强名称程序集

接下来修改之前创建的StrongName项目,让它引用StrongNameReferenceLib项目(如图9-16),调用其GetHello方法。

StrongNameReferenceLib项目的主要代码如代码清单9-6所示。

代码清单9-6  StrongNameReferenceLib项目主要代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace StrongNameReferenceLib
{
    public class 
Class1
    {
        public static string GetHello()
        {
            return 
"Hello";
        }
    }
}

修改后的StrongName项目代码如代码清单9-7所示。

代码清单9-7 StrongName项目代码

using System.Text;
using System.Reflection;
using StrongNameReferenceLib;
 
namespace StrongName
{
    
    class 
Program
    {
        static void Main(string[] args)
        {
          
Console.WriteLine(  Class1.GetHello());
           
            
Console.Read();
        }
    }
}

重新编译StrongName项目,得到新的StrongName.exe文件。使用ILDasm打开StrongName.exe文件,查看它的程序集清单,如图9-17所示。

 

 

9-17 StrongName.exe程序集清单

从程序集清单可以看到,它引用了两个具有强名称签名的程序集:mscorlib和(新创建的)StrongNameReferenceLib,对两个程序集分别添加了版本和publickeytoken标识。

下面去除StrongNameReferenceLib的强名称签名,重新编译该项目,但不重新编译StrongName项目,而用新生成的StrongNameReferenceLib.dll替换StrongName.exe之前引用的StrongNameReferenceLib.dll,看看会发生什么事情。结果如图9-18所示。

 

 

9-18StrongName项目替换dll之后结果

从图9-18的异常信息可以看到,StrongName项目找不到匹配的程序集。原因在于在StrongName的程序集清单中存储着PublicKeyToken值,而没有强名称签名的项目是没有该属性的。

 

 -----------------------------------注:本文部分内容改编自《.NET 安全揭秘》

阅读(1979) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~