我有一个在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“” -output:“ 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“” -output:“ C:\ GitRepos \ AdminPortal \ Build .. \ OUTPUT \ Test-Output \ projectCoverageReport.xml” -log:Verbose -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,因为无法加载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 Files \ dotnet \ sdk \ 1.0.3 \ Microsoft.VisualStudio.TestPlatform.ObjectModel.dll,因为无法加载PDB / MDB Microsoft(R)测试执行命令行工具版本15.0.0.0版权所有(c)Microsoft公司。版权所有。无法检测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)测试执行命令行工具版本15.0.0.0版权所有(c)Microsoft Corporation。版权所有。开始执行测试,请稍候...
...无法检测C:\ Program 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)分析器可能未正确注册,请参阅《使用指南》和-register开关。
我在bin文件夹中有.PDB文件(例如C:\ GitRepos \ AdminPortal \ Source \ test \ AdminPortal.UnitTests \ bin \ Debug \ net461 \ AdminPortal.pdb),所以我不知道为什么opencover无法加载它。可能是什么原因?
我试图指定-targetdir:(如建议在这里)和-oldStyle,但它没有差别。
我还尝试指定-searchdirs:(来自https://github.com/sawilde/opencover/wiki/Usage)并重新注册探查器regsvr32 /n /i:user C:OpenCover.4.5.3723\x86\OpenCover.Profiler.dll
(从OpenCover / NUnit找不到PDB文件)-也没有任何区别。
它与https://github.com/OpenCover/opencover/issues/610中提到的新的可移植PDB格式有关吗?但是我的目标是NETFramework v4.6.1,而不是Core 1.1。我可以明确指定to或,使用哪种PDB格式?dotnet test
msbuild
有可用的工具来显示.PDB文件是旧格式还是新格式?我按照读取.pdb文件中的建议尝试了https://github.com/Microsoft/microsoft-pdb/blob/master/cvdump/cvdump.exe,但它不返回任何内容。
在不相关的讨论中https://developercommunity.visualstudio.com/content/problem/15197/vs2017rc-locks-files-in-obj-folder-blocking-builds.html建议从可移植性更改项目属性中的PDB格式从PDB到完整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仍不支持.net核心#595,请考虑使用CoverLet(具有与OpenCover兼容的输出格式)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句