问题描述
- Win7下强名称验证失效?
- 首先编译一个带强名的程序集,然后用十六进制工具打开,修改任何一个无关紧要的字节,保存
好了,就会发现这个程序集在Win7下可以正常运行,在XP会报错
微软说:引自http://msdn.microsoft.com/zh-cn/library/cc713694(v=VS.90).aspx :
从 .NET Framework 3.5 Service Pack 1 (SP1) 开始,在将程序集载入完全信任 AppDomain 对象(例如 MyComputer 区域的默认 AppDomain)时,将不验证强名称签名。这称为强名称跳过功能
那在XP下,怎么装.NET Framework 3.5 Service Pack 1 (SP1) .NET Framework 4强名称验证也没有失效!
解决方案
重要说明:
是否能强制执行强名称验证取决于注册表项,如下面的过程所述。如果运行应用程序时使用的帐户没有访问该注册表项的访问控制列表 (ACL) 权限,该设置将无效。必须确保配置此注册表项的 ACL 权限,以使所有程序集都能读取此项。
对所有应用程序禁用强名称跳过功能
在 32 位计算机上,在系统注册表中的 HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFramework 项下创建一个子项。使用 DWORD 值为 0 的项名称 AllowStrongNameBypass。
- 或 -
在 64 位计算机上,在系统注册表中的 HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFramework 项下创建一个子项。使用 DWORD 值为 0 的项名称 AllowStrongNameBypass。在 HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoft.NETFramework 项下创建相同的子项。
对单个应用程序禁用强名称跳过功能
打开或创建应用程序配置文件。
有关此文件的更多信息,请参见应用程序配置文件。添加下面的项:
<configuration> <runtime> < bypassTrustedAppStrongNames enabled=""false"" /> </runtime></configuration>
可通过移除该配置文件设置或将该属性设置为“true”为该应用程序恢复跳过功能。
说明:
只有在已为计算机启用跳过功能的情况下,才能为应用程序打开和关闭强名称验证。如果已为计算机关闭跳过功能,则将对所有应用程序验证强名称,并且不能对单个应用程序跳过验证。