0

我正在对 OpenCover 和 NUnit 进行一些修改以满足我的需要。

简而言之,即使在 Nunit 中启用了卷影复制,我也想获得覆盖率信息。但是,当 pdb 文件不存在时,OpenCover 无法跟踪程序集。当在 NUnit 中启用影子复制时,被测程序集被复制到影子目录,OpenCover 无法找到相应的 pdf 文件。

起初,我认为 .Net Runtime 只是没有将 pdb 文件复制到影子目录。但是在我进一步调查这个问题之后,我发现运行时会复制 pdb 文件,但不会在复制程序集的同时。

我现在的理解是运行时将首先将程序集复制到影子目录。然后将加载这些程序集并通知 Opencover。OpenCover 发现没有 pdb 文件,因此这些程序集被忽略。一段时间后,pdb 文件被复制,但 OpenCover 未能注意到这一事实,因此未能跟踪这些程序集。

所以我的问题是.Net Runtime 将 pdb 文件复制到影子目录的确切时间是什么时候?我是否可以修改 OpenCover 以便它能够跟踪这些影子复制的程序集?

4

1 回答 1

0

但是,当 pdb 文件不存在时,OpenCover 无法跟踪程序集。

这是设计上的,因为检测每个在没有 PDB 的情况下加载的程序集意味着检测每个 IL 操作而不是每个序列点,其信息在 PDB 中。

一段时间后,pdb 文件被复制,但 OpenCover 未能注意到这一事实,因此未能跟踪这些程序集。

如果稍后复制 PDB,那么对于 OpenCover 来说为时已晚,因为运行时已经加载了程序集,因此 OpenCover 做出了检测决策。

现在, OpenCover 使用不同的位置来寻找 PDB

  1. 它看起来在与加载程序集相同的文件夹中
  2. 它在由设置的文件夹中查找-workingdir
  3. 它在当前目录中查找

但是,为了支持 /noshadow,我通常会发现该-mergebyhash选项可以解决这个问题,如果不是,那么我使用上面最容易使用的列表中的 #2

于 2015-01-26T20:07:34.867 回答