我从刚了解强名称的作用时就使用的是Win7,所以我一直以为强不称不能防止文件被篡改,换句话说,对于一个有强名称的exe文件,你修改这个exe的任何一个无关紧要的字节,并不会导致强名称验证失败,程序仍然可以运行但是我不止一次看到一些文章介绍说,强名称能防篡改,只要对exe对任何一点修改,就会导致验证失败,从而无法运行为此,我专门安装了XP操作系统,并安装上.NET Framework,结果果真如此:首先编译一个带强名的程序集,然后用十六进制工具打开,修改任何一个无关紧要的字节,保存好了,就会发现这个程序集在Win7下可以正常运行,在XP会报错(前面那个程序最好编译成控制台应用程序,并在CMD下运行,这样报错之后关闭报错的对话框后,就能看到出错的原因)难不成是Win7的Bug?

解决方案 »

  1.   

    因為在win沒發現所需的Framework的版本在GAC中,所以只運行根目錄的exe及使用了C:\WINDOWS\Microsoft.NET\dll,而不是使用C:\WINDOWS\Assembly\dll
      

  2.   

    引自http://msdn.microsoft.com/zh-cn/library/cc713694(v=VS.90).aspx :从 .NET Framework 3.5 Service Pack 1 (SP1) 开始,在将程序集载入完全信任 AppDomain 对象(例如 MyComputer 区域的默认 AppDomain)时,将不验证强名称签名。这称为强名称跳过功能。在完全信任环境中,对于已签名的完全信任程序集,无论这些程序集的签名是什么,对 StrongNameIdentityPermission 的要求将总是成功。唯一的限制是该程序集必须完全受信任,因为该程序集的区域是完全受信任的。因为在这些情况下强名称不是决定性因素,所以没有理由验证强名称。跳过对强名称签名的验证可显著提高性能。