My External Storage

Jul 13, 2017 - 2 minute read - Comments - C-sharp dot-net

OpenCoverでVS2017でビルドした.NETプロジェクトのカバレッジを測る

TL;DR

OpenCoverでVisual Studio2017でビルドした.NET Core/Standardのプロジェクトのコードカバレッジを計測したいときは、.csprojファイルにDebugTypefullで追加すること。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
    <DebugType>full</DebugType>
  </PropertyGroup>

</Project>

OpenCoverでカバレッジが計測できない。

Visual Studio2017から.NET Core, .NET Standardのプロジェクトの構成ファイル(.csproj)の形式が変更になっています。

++C++; // 未確認飛行 C - 新しい csproj 形式

これに合わせてか、ビルド時に生成されるPDBファイル(.pdb)の情報ファイルの内容も変更になっているようです。 そのため、通常従来の形式を期待して.pdbファイルを解析するOpenCoverをそのまま使ってもカバレッジは計測できません。

ProcessModel: Default    DomainUsage: Single
Execution Runtime: net-3.5
.Cannot instrument C:\projects\testable\Testable.Tests\bin\Debug\Testable.dll as no PDB/MDB could be loaded
.
Tests run: 2, Errors: 0, Failures: 0, Inconclusive: 0, Time: 1.4310438 seconds
  Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0
Committing...

解決方法

これを解消するには、.pdbファイルの情報を従来形式にしてビルドする必要があります。カバレッジを計測したいプロジェクトの.csprojファイル内で該当属性をfullにすることでOpenCoverでもカバレッジを計測できるようになります。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
    <DebugType Condition="'$(Configuration)'=='DEBUG'">full</DebugType>
  </PropertyGroup>

</Project>

上記例は前述の未確認飛行さんの記事を参考に、Debugビルド時のみに制限した設定にしています。

参考文献

++C++; // 未確認飛行 C - 新しい csproj 形式

Csc タスク