2010-04-26 52 views
26

我有一个使用AjaxControlToolkit.dll和Log4Net.dll的网站。如何使用VS 2010或VS 2013分析签名装配

当我尝试运行在VS 2010中的性能分析工具,它让我有以下警告:

AjaxControlToolkit.dll签名并插装它会作废其签名。如果您在没有仪器后事件的情况下继续重新签名二进制文件,则可能无法正确加载。

现在,如果我选择继续而不重新签名的选项,则会开始分析,但程序集不会加载并给出ASP.NET异常。

+0

请注意[PathofDLL](每个文斯和古斯的答案)将位于obj项目文件夹中,而不是bin文件夹中。 – Mark 2010-10-07 08:54:24

回答

1

分析器可能会改变程序集,因为它以前已签名。 显然您需要添加重新签署程序集的仪器后操作。

这可能是一个问题,因为您没有用于签署第三方程序集的sn文件。

7

答案描述为here。您必须在每个签名程序集上使用仪器后事件。

我无法管理,使其工作“的是”我的2010年安装VS我不得不把这个命令行上的每个DLL中的生成后事件:

"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" & sn -Ra [pathOfDll] [pathOfSNK] 

注意[pathOfDll]位于与项目关联的目录obj \ Debug中。

17

ghusse链接到blog post giving the answer。那里描述了答案。正如他指出的那样,您必须在每个签署的组件上使用仪器后事件。

这是最简单直接调用sn.exe

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -R [pathOfDll] [pathOfSNK] 

注意[pathOfDll]位于目录OBJ \相关的项目调试

+0

这是个什么答案?应该在哪里调用? – serhio 2011-06-09 15:19:58

+0

答案是ghusse提供的链接:http://blogs.msdn.com/b/ianhu/archive/2005/07/25/443021.aspx。 – Vince 2011-06-21 08:43:30

+1

这似乎让我经历了最初的问题,不幸的是我遇到了让Web服务器在此之后启动的问题。我也会注意到,尽管为每个程序集实现这个事件对于像我们在项目中执行的30多个程序集都是一件痛苦的事情。 – jpierson 2012-09-21 14:40:42

19

如果您在开发机器上执行此操作,您可以使用sn -Vr *完全禁用强名称验证。如果你这样做,你不必辞任任何东西。这种方法可能会带来安全风险,但如果您对此感到满意,则可以使用,这比取消更容易。

具体而言,从MSDN,它说:

寄存器组件,其用于验证跳过。或者,您可以指定用逗号分隔的用户名列表。如果您指定了infile,则验证将保持启用状态,但infile中的公钥将用于验证操作。可以用*,strongname的形式指定程序集,以注册具有指定强名称的所有程序集。应将Strongname指定为表示公钥的标记形式的十六进制数字字符串。请参阅-t和-T选项以显示公钥标记。

,使安全风险:

注意:使用此选项仅在开发过程中。将程序集添加到跳过验证列表中会造成安全漏洞。恶意程序集可以使用添加到跳过验证列表中的程序集的完全指定的程序集名称(程序集名称,版本,区域性和公钥标记)来伪造其身份。这将允许恶意程序集也跳过验证。

+5

..并且不能忘记相反: 'sn -Vu *' (这是为了重新启用此方法验证) – 2011-11-17 21:10:41

+2

'sn -Vx'也重新启用所有组件的验证。引用文档:“删除所有验证跳过条目”。 – 2012-03-09 21:39:07

+1

为了分析第三方程序集,我没有签名密钥,这被证明是我能够工作的唯一解决方案 – 2014-05-08 23:46:04

0

有可能采取的懒惰学习新的东西,免费的方式在这里,但我最终通过编写一个PowerShell脚本来unsign在我的解决方案的所有项目解决这个 - 工作就好了。作为脚本的一部分,我保存了原始的csproj文件,以便我可以在之后恢复它们。 (你也可以撤销源代码管理中的更改)。

http://pastebin.com/UbABvz7d

应该能够通过调用它传递-revert开关恢复。

+0

请注意,这可能不是所有类似问题的选项。 CodeAnalysis规则[代码分析规则CA2240](https://msdn.microsoft.com/en-us/library/ms182127.aspx)可以给编译错误,并使用[InternalsVisibleTo属性](https://msdn.microsoft。 com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute%28v = vs.110%29.aspx)也会失败。 – 2015-06-02 05:17:40

3

最简单的方法是使签署的二进制文件(尚未重新签名)的检测工作完全禁用签名检查。这是一个机器范围的设置,则可以通过注册异常为*图案激活:

sn.exe -Vr * 

该命令必须从提升的命令提示来执行。你会在SDK中找到sn.exe(在我的情况下,我发现它在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin)。

当你与测试完成后,你应该注销例外:

sn.exe -Vu * 

否则你的机器可能会受到恶意的代码,因为组件将即使他们已被篡改,被信任。

另请参阅Access denied running sn.exe on Windows 7