我有一个在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 test
或msbuild
吗?
是否可以显示任何工具,.PDB文件是旧格式还是新格式? 我按照https://github.com/Microsoft/microsoft-pdb/blob/master/cvdump/cvdump.exe的建议尝试了Reading a .pdb file, 但它不会返回任何东西。
答案 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。