【问题标题】:When will pdb files be copied to shadow copy directory?什么时候将 pdb 文件复制到卷影副本目录?
【发布时间】:2015-03-24 13:59:10
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: nunit pdb-files opencover shadow-copy


    【解决方案1】:

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

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

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

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

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

    1. 它在加载程序集的文件夹中查找
    2. -workingdir设置的文件夹中查找
    3. 它在当前目录中查找

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多