【问题标题】:OpenCover Cannot instrument .exe as no PDB/MDB could be loadedOpenCover 无法检测 .exe,因为无法加载 PDB/MDB
【发布时间】:2017-11-17 11:07:23
【问题描述】:

我有一个在 VS2015 下运行的 ASP.NET Core 项目(目标为 .NETFramework,Version=v4.6.1)。 当我转换到 VS2017 时,我无法让 OpenCover 工作。 build.PS1 运行时

C:\OpenCover\4.6.519\tools\OpenCover.Console.exe -register:user -target:"C:\Program Files\dotnet\dotnet.exe" -targetargs:" 测试 "C:\GitRepos\AdminPortal\Source\test\AdminPortal.UnitTests\AdminPortal.UnitTests.csproj" " -输出:“C:\GitRepos\AdminPortal\Build..\OUTPUT\Test-Output\projectCoverageReport.xml” -log:详细 -oldStyle

输出(为简洁起见)如下:

C:\OpenCover\4.6.519\tools\OpenCover.Console.exe -register:user -target:"C:\Program Files\dotnet\dotnet.exe" -targetargs:" 测试 "C:\GitRepos\AdminPortal\Source\test\AdminPortal.UnitTests\AdminPortal.UnitTests.csproj" " -输出:“C:\GitRepos\AdminPortal\Build..\OUTPUT\Test-Output\projectCoverageReport.xml” -log:详细 -oldStyle 执行:C:\Program Files\dotnet\dotnet.exe
无法将 C:\Program Files\dotnet\sdk\1.0.3\dotnet.dll 检测为 no 可以加载 PDB/MDB ... 无法将 C:\Program Files\dotnet\sdk\1.0.3\Microsoft.TestPlatform.Build.dll 检测为没有 PDB/MDB 可以加载
构建开始,请稍候...
...
无法仪表 C:\Program Files\dotnet\sdk\1.0.3\NuGet.Packaging.dll 没有 PDB/MDB 可以加载
无法将 RefEmit_InMemoryManifestModule 检测为否 可以加载 PDB/MDB 构建完成。

试运行 C:\GitRepos\AdminPortal\Source\test\AdminPortal.UnitTests\bin\Debug\net461\AdminPortal.UnitTests.dll(.NETFramework,Version=v4.6.1) 无法检测 C:\Program Files\dotnet\sdk\1.0.3\vstest.console.dll 因为无法加载 PDB/MDB
无法检测 C:\Program Files\dotnet\sdk\1.0.3\Microsoft.TestPlatform.CoreUtilities.dll 为否 可以加载 PDB/MDB
无法检测 C:\Program 文件\dotnet\sdk\1.0.3\Microsoft.VisualStudio.TestPlatform.ObjectModel.dll 因为无法加载 PDB/MDB Microsoft (R) 测试执行命令 Line Tool 版本 15.0.0.0 版权所有 (c) Microsoft Corporation。全部 保留权利。

无法检测 RefEmit_InMemoryManifestModule,因为没有 PDB/MDB 可以 被加载构建完成。试运行 C:\GitRepos\AdminPortal\Source\test\AdminPortal.UnitTests\bin\Debug\net461\AdminPortal.UnitTests.dll(.NETFramework,Version=v4.6.1) 无法检测 C:\Program Files\dotnet\sdk\1.0.3\vstest.console.dll 因为无法加载 PDB/MDB Microsoft (R) 测试执行命令 Line Tool 版本 15.0.0.0 版权所有 (c) Microsoft Corporation。全部 保留权利。开始测试执行,请稍候...
... 不能 仪器 C:\程序 Files\dotnet\sdk\1.0.3\TestHost\msdia140typelib_clr0200.dll 为否 可以加载 PDB/MDB
无法仪表 C:\GitRepos\AdminPortal\Source\test\AdminPortal.UnitTests\bin\Debug\net461\AdminPortal.exe 因为无法加载 PDB/MDB ...

测试总数:39。通过:37。失败:0。跳过:2。测试运行 成功的。测试执行时间:6.4838 秒

提交...
没有结果,这可能有多种原因。这 最常见的原因是:
1) 缺少与过滤器匹配的程序集的 PDB,请查看 输出文件并参考使用指南 (Usage.rtf) 关于过滤器。
2) profiler可能没有正确注册,请参考Usage 指南和 -register 开关。

我在 bin 文件夹中有 .PDB 文件(例如 C:\GitRepos\AdminPortal\Source\test\AdminPortal.UnitTests\bin\Debug\net461\AdminPortal.pdb), 所以我不知道为什么 opencover 无法加载它。可能是什么原因?

我尝试指定 -targetdir:(如建议的 here ) 和 -oldStyle ,但没​​有区别。
我还尝试指定 -searchdirs: (来自https://github.com/sawilde/opencover/wiki/Usage) 并重新注册分析器 regsvr32 /n /i:user C:OpenCover.4.5.3723\x86\OpenCover.Profiler.dll(来自OpenCover/NUnit can't find PDB files)——也没什么区别。

是否与https://github.com/OpenCover/opencover/issues/610 中提到的新的便携式 PDB 格式有关?
但我的目标是 NETFramework v4.6.1,而不是 Core 1.1。我可以明确指定 dotnet testmsbuild 使用哪种 PDB 格式吗?

是否有任何工具可以显示,.PDB 文件是旧格式还是新格式? 我按照Reading a .pdb file 的建议尝试了https://github.com/Microsoft/microsoft-pdb/blob/master/cvdump/cvdump.exe, 但它不返回任何东西。

【问题讨论】:

    标签: asp.net-core .net-core pdb-files opencover


    【解决方案1】:

    在不相关的讨论https://developercommunity.visualstudio.com/content/problem/15197/vs2017rc-locks-files-in-obj-folder-blocking-builds.html 中建议 将项目属性中的 PDB 格式从 Portable PDB 更改为 Full PDB。
    如果您更喜欢使用 UI,请在 Visual Studio 中打开 项目属性->构建->高级->输出->调试信息从便携式更改为完整。 它将添加到具有特定构建条件的 csproj 文件设置

    <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|netstandard1.6|AnyCPU'">
        <DebugType>full</DebugType>
        <DebugSymbols>True</DebugSymbols>
      </PropertyGroup>
    

    通常您希望将其应用于所有选项,因此删除条件以仅具有以下条件(如果您之前没有使用 Visual Studio,您可以将下面的 PropertyGroup 粘贴到您的 .csproj)

    <PropertyGroup >
        <DebugType>full</DebugType>
        <DebugSymbols>True</DebugSymbols>
      </PropertyGroup>
    

    OpenCover 将能够检测您的项目。

    2019 年 4 月 19 日更新:由于 OpenCover 仍为 doesn’t have .net core support #595,请考虑使用具有 OpenCover 兼容输出格式的 CoverLet

    【讨论】:

    • 仅供所有在“核心”上运行 opencover 时遇到问题的人参考:仪器还有一个已知问题 - “核心”运行时与“正常”运行时不同,当 opencover 得到更好的改进时仪器仪表..它破坏了“核心”中的仪器仪表。为了能够检测“核心”运行时,-oldstyle 参数 必须 传递给 opencover,以使其使用旧的检测方法。请参阅 issue 601issue 595 以获取详细信息并了解何时修复。
    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    相关资源
    最近更新 更多