我有一个使用AjaxControlToolkit.dll和Log4Net.dll的网站。
当我在VS 2010中尝试运行性能分析工具时,它会给我以下警告:
AjaxControlToolkit.dll已签名,对其进行仪器化将使其签名无效。如果您在不进行后续仪器事件重新签名二进制文件的情况下继续进行,则可能无法正确加载。
现在,如果我选择不重新签名的选项,则分析开始,但程序集不会加载,并引发ASP.NET异常。
我有一个使用AjaxControlToolkit.dll和Log4Net.dll的网站。
当我在VS 2010中尝试运行性能分析工具时,它会给我以下警告:
AjaxControlToolkit.dll已签名,对其进行仪器化将使其签名无效。如果您在不进行后续仪器事件重新签名二进制文件的情况下继续进行,则可能无法正确加载。
现在,如果我选择不重新签名的选项,则分析开始,但程序集不会加载,并引发ASP.NET异常。
sn -Vr *
完全禁用强名称验证。如果这样做,您就不必重新签名任何内容。这种方法可能存在安全风险,但是如果您对此感到舒适,那么它比重新签名更容易。sn -Vu *
(这是重新启用此方法进行验证) - Sean Aitkensn -Vx
还重新启用了所有程序集的验证。引用文档中的话:“删除所有跳过验证的条目。”。 - user456814ghusse链接到一个包含答案的博客文章。答案在那里描述。正如他所指出的,您必须在每个已签名的程序集上使用后置事件。
直接调用sn.exe
是最简单的方法:
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -R [pathOfDll] [pathOfSNK]
请注意,[pathOfDll]
位于与项目关联的目录obj\Debug中。
"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\sn.exe"
。因此,如果您找不到它,请在 Windows 驱动器中搜索 sn.exe。 - Abdul Rauf让未重新签名的已签名二进制文件进行检测的最简单方法是完全禁用签名检查。这是一项机器范围内的设置,您可以通过为 *
模式注册例外来激活该设置:
sn.exe -Vr *
这个命令必须从管理员权限的命令提示符中执行。你可以在SDK中找到sn.exe
(在我的情况下,我在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
中找到了它)。
当测试完成后,应该注销该异常:
sn.exe -Vu *
性能分析器可能会更改程序集,因为它之前被签名过。 显然,您需要添加一个后置操作,对程序集进行重新签名。
这可能是一个问题,因为您没有用于签署第三方程序集的 sn 文件。
应该能够通过调用传递-revert开关来撤消。