对程序集进行检测和重新签名

更新:2007 年 11 月

测试程序集中的代码时如果需要收集代码覆盖率信息,必须先检测该程序集。检测过程会将生成代码覆盖率信息的代码添加到程序集中。有关为获得代码覆盖率信息而检测程序集的信息,请参见如何:获取代码覆盖率数据

但如果测试的程序集是用强名称签名的,则检测所导致的代码修改将使该程序集的签名无效。因此,Visual Studio 会在检测步骤完成之后立即自动尝试重新签名程序集。

说明:

有关测试运行中的步骤的更多信息,请参见测试部署概述

如果重新签名成功,测试运行可能会完成并生成正确的结果。如果签名失败,则会生成类似如下内容的错误:

Strong name verification failed for the instrumented assembly 'SignedLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1696e096eba75082'. Please ensure that the right key file for re-signing after instrumentation is specified in the test run configuration.

若要修复此错误,请尝试以下操作:

  • 对程序集重新签名。如果您有用于对程序集进行签名的密钥文件,可以提供该文件,以便 Visual Studio 可以自动对程序集进行重新签名。

  • 禁用签名验证。可以在要测试程序集的计算机上禁用签名验证。此操作仅适用于指定的程序集。

重新签名程序集

在测试运行配置编辑器的“代码覆盖率”页上,可以指定用于在检测后重新签名二进制文件的密钥文件。如果您要测试多个已签名的程序集,Visual Studio 会尝试使用您指定的密钥文件重新签名所有已签名的具有强名称的程序集。

在测试运行配置编辑器上,可以指定 Visual Studio 将用来重新签名具有强名称的程序集的密钥文件。有关更多信息,请参见如何:获取代码覆盖率数据主题中的“重新签名程序集”过程。指定密钥文件会使测试运行过程增加一个重新签名的步骤。Visual Studio 会自动确定哪些程序集必须用您指定的密钥文件重新签名。可用该密钥文件重新签名的所有程序集都会重新签名。

说明:

只能用密钥文件对程序集重新签名,而不能用密钥名称。

在以下情况下程序集重新签名会不完整或根本不会发生:

  • 如果密钥文件不可用,Visual Studio 将无法重新签名程序集。您可以尝试重新生成密钥文件,然后再尝试重新签名程序集。

  • 如果密钥文件受密码保护,重新签名将失败。

  • 每个测试运行只支持一个密钥文件。例如,假设某个测试运行引用了多个程序集。这些程序集中的一部分是使用一个密钥文件签名的,而另一部分是使用另一个密钥文件签名的。由于您只能选择一个密钥文件,因此需要另一个密钥文件的程序集将不会重新签名,而必须通过手动来重新签名。如果有一些程序集未签名,将产生一个测试运行级错误。在这种情况下,可以选择禁用签名验证,如禁用签名验证中所述。

禁用签名验证

如果重新签名失败(例如在正确的密钥文件不可用的情况下),可以选择在测试运行期间禁用程序集的签名验证。为此,请将强名称工具 (Sn.exe) 与 –Vr 选项结合使用,如下所示:

SN -Vr <程序集名称>

这样在运行此命令的计算机上只会禁用指定程序集的强名称验证。

说明:

如果您是在以远程方式运行测试并需要禁用签名验证,必须在将在远程计算机上运行的安装和清理脚本中包括 SN.exe 命令。

执行此操作需要有足够的权限。

测试运行完成后,应重新启用签名验证。为此,请将 SN.exe 命令与 –Vu 选项结合使用,如下所示:

SN -Vu <程序集名称>

建议通过在脚本中使用 SN.exe 命令来禁用和重新启用签名验证。可以在安装脚本中禁用验证,在清理脚本中重新启用验证。

说明:

重新启用签名验证很重要。如果不重新启用签名验证,可能导致安全问题。

在各脚本文件中放置了 SN 命令后,需要在测试运行配置编辑器的“安装脚本和清理脚本”页上指定脚本文件。有关更多信息,请参见如何:指定测试运行配置。有关在测试运行中执行这些步骤和其他步骤的顺序的信息,请参见测试部署概述

请参见

任务

如何:指定测试运行配置

如何:获取代码覆盖率数据

如何:使用强名称为程序集签名

概念

测试部署概述

具有强名称的程序集

参考

强名称工具 (Sn.exe)