热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

今天对强名称和GAC的一些测试后的疑问整理,希望得到大虾指点

新建solution,然后添加一个ClassLibrary的项目test,然后在这个项目中加public属性的class2,class3,里面不加任何代码.加usercontrol1,随便拉几个bu
新建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密钥文件,到底有什么区别呢??各位高手们,给点指点吧.

推荐阅读
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
author-avatar
陨落灬星辰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有