Skip to content

Commit 721f32e

Browse files
committed
Create portable PDBs during the build
* Convert Portable PDB to Windows PDB for OpenCover * Update to xunit 2.3.1 to avoid xunit/xunit#1501 * Apply workarounds for OpenCover/opencover#800
1 parent d7bef17 commit 721f32e

6 files changed

Lines changed: 74 additions & 9 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ packages/
1010
*.user
1111
TestResults/
1212
OpenCover.Reports/
13+
OpenCover.Symbols/
1314
.nuget/NuGet.exe
1415
build/nuget/
1516
*.log

.nuget/packages.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
33
<package id="Codecov" version="1.0.1" />
4+
<package id="Microsoft.DiaSymReader.Pdb2Pdb" version="1.1.0-beta1-62624-01" />
45
<package id="OpenCover" version="4.6.519" />
56
<package id="ReportGenerator" version="2.3.5.0" targetFramework="net452" />
67
<package id="xunit.runner.console" version="2.1.0" targetFramework="net452" />

NuGet.config

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<configuration>
3+
<packageSources>
4+
<add key="symreader-converter" value="https://dotnet.myget.org/F/symreader-converter/api/v3/index.json" />
5+
</packageSources>
6+
</configuration>

StyleCop.Analyzers/Directory.Build.props

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,8 @@
2727
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
2828
</PropertyGroup>
2929

30-
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
31-
<DebugType>full</DebugType>
32-
<DebugSymbols>true</DebugSymbols>
33-
</PropertyGroup>
34-
35-
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
36-
<DebugType>pdbonly</DebugType>
30+
<PropertyGroup>
31+
<DebugType>portable</DebugType>
3732
<DebugSymbols>true</DebugSymbols>
3833
</PropertyGroup>
3934

StyleCop.Analyzers/StyleCop.Analyzers.Test/StyleCop.Analyzers.Test.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
<ItemGroup>
1818
<PackageReference Include="Microsoft.CodeAnalysis" Version="1.2.1" />
19-
<PackageReference Include="xunit" Version="2.3.0" />
20-
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" PrivateAssets="all" />
19+
<PackageReference Include="xunit" Version="2.3.1" />
20+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" PrivateAssets="all" />
2121
</ItemGroup>
2222

2323
<ItemGroup>

build/opencover-report.ps1

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,75 @@ $packageConfig = [xml](Get-Content ..\.nuget\packages.config)
2929
$opencover_version = $packageConfig.SelectSingleNode('/packages/package[@id="OpenCover"]').version
3030
$reportgenerator_version = $packageConfig.SelectSingleNode('/packages/package[@id="ReportGenerator"]').version
3131
$xunitrunner_version = $packageConfig.SelectSingleNode('/packages/package[@id="xunit.runner.console"]').version
32+
$pdb2pdb_version = $packageConfig.SelectSingleNode('/packages/package[@id="Microsoft.DiaSymReader.Pdb2Pdb"]').version
3233

3334
$packages_folder = '..\packages'
3435
$opencover_console = "$packages_folder\OpenCover.$opencover_version\tools\OpenCover.Console.exe"
3536
$xunit_runner_console = "$packages_folder\xunit.runner.console.$xunitrunner_version\tools\xunit.console.x86.exe"
3637
$report_generator = "$packages_folder\ReportGenerator.$reportgenerator_version\tools\ReportGenerator.exe"
38+
$pdb2pdb = "$packages_folder\Microsoft.DiaSymReader.Pdb2Pdb.$pdb2pdb_version\tools\Pdb2Pdb.exe"
3739
$report_folder = '.\OpenCover.Reports'
40+
$symbols_folder = '.\OpenCover.Symbols'
3841
$target_dll = "..\StyleCop.Analyzers\StyleCop.Analyzers.Test\bin\$Configuration\net452\StyleCop.Analyzers.Test.dll"
3942
$target_dll_csharp7 = "..\StyleCop.Analyzers\StyleCop.Analyzers.Test.CSharp7\bin\$Configuration\net46\StyleCop.Analyzers.Test.CSharp7.dll"
4043

44+
If (Test-Path $symbols_folder) {
45+
Remove-Item -Recurse -Force $symbols_folder
46+
}
47+
48+
$symbols_folder_csharp6 = Join-Path $symbols_folder 'CSharp6'
49+
$symbols_folder_csharp7 = Join-Path $symbols_folder 'CSharp7'
50+
mkdir $symbols_folder | Out-Null
51+
mkdir $symbols_folder_csharp6 | Out-Null
52+
mkdir $symbols_folder_csharp7 | Out-Null
53+
54+
function Convert-Coverage-Pdb() {
55+
param (
56+
[string]$assembly,
57+
[string]$outputDir
58+
)
59+
$sourceDir = [IO.Path]::GetDirectoryName($assembly)
60+
$outputName = [IO.Path]::ChangeExtension([IO.Path]::GetFileName($assembly), 'pdb')
61+
$sourcePdb = Join-Path $sourceDir $outputName
62+
$output = Join-Path $outputDir $outputName
63+
if (Test-Path $sourcePdb) {
64+
&$pdb2pdb $assembly /out $output
65+
66+
# Workaround for https://github.com/OpenCover/opencover/issues/800
67+
Remove-Item $sourcePdb
68+
Copy-Item $assembly $outputDir
69+
}
70+
}
71+
72+
function Extract-Coverage-Pdb() {
73+
param (
74+
[string]$assembly,
75+
[string]$outputDir
76+
)
77+
$sourceDir = [IO.Path]::GetDirectoryName($assembly)
78+
$outputName = [IO.Path]::ChangeExtension([IO.Path]::GetFileName($assembly), 'pdb')
79+
$intermediatePdb = Join-Path $sourceDir $outputName
80+
$output = Join-Path $outputDir $outputName
81+
if (-not (Test-Path $output)) {
82+
&$pdb2pdb $assembly /out $intermediatePdb /extract
83+
if (Test-Path $intermediatePdb) {
84+
&$pdb2pdb $assembly /pdb $intermediatePdb /out $output
85+
Remove-Item $intermediatePdb
86+
87+
# Workaround for https://github.com/OpenCover/opencover/issues/800
88+
Copy-Item $assembly $outputDir
89+
}
90+
}
91+
}
92+
93+
$target_dir = [IO.Path]::GetDirectoryName($target_dll)
94+
Get-ChildItem $target_dir -Filter *.dll | Foreach-Object { Convert-Coverage-Pdb -assembly $_.FullName -outputDir $symbols_folder_csharp6 }
95+
Get-ChildItem $target_dir -Filter *.dll | Foreach-Object { Extract-Coverage-Pdb -assembly $_.FullName -outputDir $symbols_folder_csharp6 }
96+
97+
$target_dir = [IO.Path]::GetDirectoryName($target_dll_csharp7)
98+
Get-ChildItem $target_dir -Filter *.dll | Foreach-Object { Convert-Coverage-Pdb -assembly $_.FullName -outputDir $symbols_folder_csharp7 }
99+
Get-ChildItem $target_dir -Filter *.dll | Foreach-Object { Extract-Coverage-Pdb -assembly $_.FullName -outputDir $symbols_folder_csharp7 }
100+
41101
If (Test-Path $report_folder) {
42102
Remove-Item -Recurse -Force $report_folder
43103
}
@@ -55,6 +115,7 @@ If ($AppVeyor) {
55115
-filter:"+[StyleCop*]*" `
56116
-excludebyattribute:*.ExcludeFromCodeCoverage* `
57117
-excludebyfile:*\*Designer.cs `
118+
-searchdirs:"$symbols_folder_csharp6" `
58119
-output:"$report_folder\OpenCover.StyleCopAnalyzers.xml" `
59120
-target:"$xunit_runner_console" `
60121
-targetargs:"$target_dll -noshadow $AppVeyorArg"
@@ -71,6 +132,7 @@ If ($AppVeyor -and -not $?) {
71132
-filter:"+[StyleCop*]*" `
72133
-excludebyattribute:*.ExcludeFromCodeCoverage* `
73134
-excludebyfile:*\*Designer.cs `
135+
-searchdirs:"$symbols_folder_csharp7" `
74136
-output:"$report_folder\OpenCover.StyleCopAnalyzers.xml" `
75137
-mergebyhash -mergeoutput `
76138
-target:"$xunit_runner_console" `

0 commit comments

Comments
 (0)