如何使用VS 2010或VS 2013配置已签名的装配体

时间:2010-04-26 06:33:13

标签: visual-studio-2010 profiling instrumentation strongname

我有一个使用AjaxControlToolkit.dll和Log4Net.dll的网站。

当我尝试在VS 2010上运行性能分析工具时,它会给我以下警告:

  

AjaxControlToolkit.dll已签名并且检测它将使其签名无效。如果您在没有仪器后事件的情况下继续重新签名二进制文件,则可能无法正确加载。

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

6 个答案:

答案 0 :(得分:21)

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

具体来说,来自MSDN,它说:

  

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

安全风险:

  

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

答案 1 :(得分: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 \ Debug 中。

答案 2 :(得分:7)

答案描述为here。您必须在每个签名的程序集上使用post-instrument事件。

我无法通过安装VS 2010来“按原样”工作。我必须将此命令行称为每个dll上的构建后事件:

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

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

答案 3 :(得分:4)

使用未经重新签名的签名二进制文件来获取检测工作的最简单方法是完全禁用签名检查。这是一个机器范围的设置,您可以通过注册*模式的例外来激活:

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

答案 4 :(得分:1)

探查器可能会更改程序集,因为它之前已签名。 显然你需要添加一个重新签署装配的仪器后动作。

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

答案 5 :(得分:0)

可能已经采取了懒惰的学习 - 新事物的方式,但我最终解决了这个问题,写了一个powershell脚本来取消我解决方案中的所有项目 - 工作得很好。作为脚本的一部分,我保存了原始的csproj文件,以便我可以在之后还原它们。 (您也可以撤消源代码管理中的更改)。

http://pastebin.com/UbABvz7d

应该可以通过调用它来通过-revert开关来恢复。