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

如果您希望在测试程序集中的代码时收集代码覆盖率数据,Visual Studio 必须先检测该程序集。 在检测过程中,会向该程序集添加用来生成代码覆盖率数据的代码。

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

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

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

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

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

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

重新签名程序集

在针对代码覆盖率的诊断数据适配器测试设置中,可以指定用于在检测后对二进制文件进行重新签名的密钥文件。 如果您要测试多个已签名的程序集,Visual Studio 会尝试对使用指定密钥文件签名的所有强名称程序集进行重新签名。

指定密钥文件会为测试运行过程增加一个重新签名的步骤。 Visual Studio 会自动确定哪些程序集必须用您指定的密钥文件进行重新签名。 可用该密钥文件重新签名的所有程序集都会重新签名。

提示

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

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

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

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

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

禁用签名验证

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

SN -Vr <程序集名称>

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

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

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

SN -Vu <程序集名称>

提示

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

请参见

任务

如何:使用自动测试的测试设置配置代码覆盖率

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

创建测试设置以从 Visual Studio 中运行自动测试

创建作为测试计划一部分的自动测试的测试设置

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

参考

Sn.exe(强名称工具)

概念

具有强名称的程序集