今天对强名称和GAC的一些测试后的疑问整理,希望得到大虾指点
2007-04-07 16:39
337 查看
新建solution,然后添加一个ClassLibrary的项目test,然后在这个项目中加public属性的class2,class3,里面不加任何代码.加usercontrol1, 随便拉几个button上去,保存,编译,然后在项目属性里,给这个项目加上强名称,密钥文件为test.pfx(pfx与snk文件一样,都可以用来给程序集加上强名称,但是pfx是在加的过程中,需要设置密码的).使用gacutil把程序集加入GAC中.
步骤一: 新建一个windowsApplication1项目,引用刚刚生成的dll,可以正常使用usercontrol1. 然后再向test项目中加入usercontrol2,重新编译后,在windowsapplication中,toolbox中出现了新增加的usercontrol2,但是如果把它拉出,来添加到winform项目的form中时,报错.但是如果从GAC中,将test.dll移走,重新编译,则能够正常使用usercontrol2,或者将test的assembly的version改掉,重新编译,也可以正常使用usercontrol2. 看样子是因为test的程序集被注册成共享程序集后 ,这个程序集就无法被修改了(但是usercontrol2这个类型还是能够出现在test的名字空间,难道可以修改它的manifest?)改掉version号后的test程序集已经跟GAC中的test不是同一个程序集,所以能被编译进去.再以此推断,如果给test换个密钥,也能把修改后的内容编译进去.问题:为什么test程序集注册成共享程序集后,不能再在项目里把新修改的内容编译进去呢???
步骤二: 把version号改回来,使test的程序集和GAC的test一样. 然后给class2加上如下代码:
public static int x = 0;重新编译,发现在winform项目中可以正常访问这个x变量,这就怪了,怎么能够编译进去呢?难道public static int x = 0;编译后也是存在与manifest中的吗??
步骤三: 给class2中加入如下代码:
public static int add(int z)
{
return x +z;
}
重新编译,winform项目中,可以访问add方法,int a = test.Class2.add(3); 这样编译不报错,但是debug的时候会抛出异常,无法访问add方法. 这到是好理解,毕竟前面得出过结论,在gac中的程序集是不能被修改的,但是为什么呢???
步骤四: 从gac中移走test,然后保持test的强名称不变,重新编译,winform项目中,可以正常使用add方法,不会报错.那为什么说强名称能保证程序不篡改呢?这样不就改动了吗?(这个问题好象问的有点弱智,我也不知道).
另外还有如下疑问:使用snk密钥文件和使用pfx密钥文件,到底有什么区别呢??各位高手们,给点指点吧.
步骤一: 新建一个windowsApplication1项目,引用刚刚生成的dll,可以正常使用usercontrol1. 然后再向test项目中加入usercontrol2,重新编译后,在windowsapplication中,toolbox中出现了新增加的usercontrol2,但是如果把它拉出,来添加到winform项目的form中时,报错.但是如果从GAC中,将test.dll移走,重新编译,则能够正常使用usercontrol2,或者将test的assembly的version改掉,重新编译,也可以正常使用usercontrol2. 看样子是因为test的程序集被注册成共享程序集后 ,这个程序集就无法被修改了(但是usercontrol2这个类型还是能够出现在test的名字空间,难道可以修改它的manifest?)改掉version号后的test程序集已经跟GAC中的test不是同一个程序集,所以能被编译进去.再以此推断,如果给test换个密钥,也能把修改后的内容编译进去.问题:为什么test程序集注册成共享程序集后,不能再在项目里把新修改的内容编译进去呢???
步骤二: 把version号改回来,使test的程序集和GAC的test一样. 然后给class2加上如下代码:
public static int x = 0;重新编译,发现在winform项目中可以正常访问这个x变量,这就怪了,怎么能够编译进去呢?难道public static int x = 0;编译后也是存在与manifest中的吗??
步骤三: 给class2中加入如下代码:
public static int add(int z)
{
return x +z;
}
重新编译,winform项目中,可以访问add方法,int a = test.Class2.add(3); 这样编译不报错,但是debug的时候会抛出异常,无法访问add方法. 这到是好理解,毕竟前面得出过结论,在gac中的程序集是不能被修改的,但是为什么呢???
步骤四: 从gac中移走test,然后保持test的强名称不变,重新编译,winform项目中,可以正常使用add方法,不会报错.那为什么说强名称能保证程序不篡改呢?这样不就改动了吗?(这个问题好象问的有点弱智,我也不知道).
另外还有如下疑问:使用snk密钥文件和使用pfx密钥文件,到底有什么区别呢??各位高手们,给点指点吧.
相关文章推荐
- c++ 关于对象浅复制的一些疑问,希望懂得大虾给我解释解释~~
- 小站用于测试毕业设计,希望通过毕业设计能在技术和经验得到更多提高
- 【软件测试】整理了一些软件测试相关的网站
- 今天把最近看DotNetNuke的心得写一些,希望对别人有所帮助
- 今天来整理一下做过的一些题吧
- 网友整理的一些测试资料
- 一些常见的GUI对应的程序名称整理
- 一些常见的GUI对应的程序名称整理
- 软件测试会大概问的一些问题整理续
- 今天注册了csdn,希望可以在此得到进步
- 今天为了解决编码的问题,整理了一些代码放到这里!
- 关于临时表使用,今天突然用到了临时表,一些sql语句顿时都想不起怎么来写了,今天请教同事头弄完了,特此整理下。
- 有日子没来了,今天把以前用海阔天空这个名称在另一个博客上的一些记忆放上来做个记录
- 以下是computer vision:algorithm and application计算机视觉算法与应用这本书中附录里关于计算机视觉的一些测试数据集和源码站点,我整理了下,加了点中文注解
- 在工作中的一些想法,希望有管理经验的兄弟能够指点一二
- 一些基础的面试的java知识,普及下。开发和测试都用得到。
- 一些常见的GUI对应的程序名称整理
- 整理的一些常见的开源测试工具
- 小弟花了两个小时整理了Php方面的一些热门资料,汇总了资料下载地址,有专题,有文档,有源码,希望大家喜欢~
- 自己开发了一款手机电脑互传文件的小工具(文件传手),希望得到大家认可和指点