OpenCover无法检测.exe,因为无法加载PDB / MDB

时间:2017-06-15 05:34:40

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

我有一个在VS2015下工作的ASP.NET核心项目(针对.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"   "   -output:" C:\ GitRepos \ AdminPortal \构建.. \ 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"   "   -output:" C:\ GitRepos \ AdminPortal \构建.. \ OUTPUT \试验输出\ projectCoverageReport.xml"   -log:详细-oldStyle执行:C:\ Program Files \ dotnet \ dotnet.exe
  无法将C:\ Program Files \ dotnet \ sdk \ 1.0.3 \ dotnet.dll设为无   可以加载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 as no PDB / MDB   可以加载
  无法将RefEmit_InMemoryManifestModule设置为no   PDB / MDB可以加载Build completed。

     

试运行    C:\ GitRepos \ AdminPortal \源\测试\ AdminPortal.UnitTests \ BIN \调试\ net461 \ AdminPortal.UnitTests.dll(.NETFramework,版本= 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为no   可以加载PDB / MDB   不能仪表C:\ Program   文件\ DOTNET \ SDK \ 1.0.3 \ Microsoft.VisualStudio.TestPlatform.ObjectModel.dll   因为没有PDB / MDB可以加载Microsoft(R)测试执行命令   Line Tool Version 15.0.0.0版权所有(c)Microsoft Corporation。所有   保留权利。

     

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

     

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

     

...犯下
   没有结果,这可能有很多原因。该   最常见的原因是:
      1)缺少与过滤器匹配的组件的PDB请查看       输出文件,请参阅有关过滤器的使用指南(Usage.rtf)       2)剖析器可能未正确注册,请参阅用法       指南和-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。我可以明确指定要使用哪种PDB格式dotnet testmsbuild吗?

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

1 个答案:

答案 0 :(得分:3)

在无关的讨论中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