2017-06-15 4 views
2

J'ai un projet ASP.NET Core (cible pour .NETFramework, Version = v4.6.1) qui fonctionnait sous VS2015. Lorsque je suis converti en VS2017, je ne suis pas en mesure de faire fonctionner OpenCover. Lorsque build.PS1 courtOpenCover Impossible d'instrument .exe car aucun PDB/MDB n'a pu être chargé

C: \ OpenCover \ 4.6.519 \ tools \ OpenCover.Console.exe -register: l'utilisateur -target: "C: \ Program Files \ dotnet \ dotnet.exe" - targetargs: "test" C: \ GitRepos \ AdminPortal \ Source \ test \ AdminPortal.UnitTests \ AdminPortal.UnitTests.csproj " " -output: "C: \ GitRepos \ AdminPortal \ Build .. \ OUTPUT \ Test-Output \ projectCoverageReport.xml » -log: verbeux -oldStyle

la sortie (tronqué par souci de brièveté) est la suivante:

C: \ OpenCover \ 4.6.519 \ tools \ OpenCover.Console.exe -register: utilisateur -target: "C: \ Program Files \ dotnet \ dotnet.exe" -targetargs: "test" C: \ GitRepos \ AdminPortal \ Source \ test \ AdminPortal.UnitTests \ AdminPortal.UnitTests.csproj " " -output:" C: \ GitRepos \ AdminPortal \ build .. \ sORTIE \ test-Output \ projectCoverageReport.xml" -log: Verbose -oldStyle Exécution: C: \ Program Files \ dotnet \ dotnet.exe
Impossible d'instrument C: \ Program Files \ dotnet \ sdk \ 1.0.3 \ dotnet.dll comme aucun PDB/MDB peut être chargé ... Impossible d'instrument C: \ Program Files \ dotnet \ sdk \ 1.0.3 \ Microsoft.TestPlatform.Build.dll comme aucun PDB/MDB pourrait être oaded
Construire commencé, s'il vous plaît patienter ...
...
Impossible instrument C: \ Program Files \ dotnet \ sdk \ 1.0.3 \ NuGet.Packaging.dll comme pas PDB/MDB pourrait être chargé
Impossible d'instrument RefEmit_InMemoryManifestModule non PDB/MDB peut être chargé La construction est terminée.

run test pour C: \ GitRepos \ AdminPortal \ Source \ test \ AdminPortal.UnitTests \ bin \ Debug \ net461 \ AdminPortal.UnitTests.dll (.NETFramework, version = V4.6.1) Impossible instrument C: \ Program Files \ dotnet \ sdk \ 1.0.3 \ vstest.console.dll car aucun PDB/MDB n'a pu être chargé
Impossible d'instrumenter C: \ Program Fichiers \ dotnet \ sdk \ 1.0.3 \ Microsoft.TestPlatform.CoreUtilities. dll pas APB/MDB pourrait être chargé
Impossible instrument C: \ Program Files \ dotnet \ sdk \ 1.0.3 \ Microsoft.VisualStudio.TestPlatform.ObjectModel.dll comme aucun PDB/MDB pourrait être chargé Microsoft (R Test d'exécution C Commande Outil de ligne Version 15.0.0.0 Copyright (c) Microsoft Corporation. Tous droits réservés.

Impossible d'instrumenter RefEmit_InMemoryManifestModule car aucun PDB/MDB n'a pu être chargé La construction a été terminée. Test exécuté pour C: \ GitRepos \ AdminPortal \ Source \ test \ AdminPortal.UnitTests \ bin \ Debug \ net461 \ AdminPortal.UnitTests.dll (.NETFramework, Version = v4.6.1) Impossible d'instrument C: \ Program Files \ dotnet \ sdk \ 1.0.3 \ vstest.console.dll car aucun PDB/MDB n'a pu être chargé Commande d'exécution de test Microsoft (R) Outil de ligne Version 15.0.0.0 Copyright (c) Microsoft Corporation. Tous droits réservés. Début de l'exécution du test, veuillez patienter ...
...Ne peut pas instrument C: \ Program Files \ dotnet \ sdk \ 1.0.3 \ TestHost \ msdia140typelib_clr0200.dll comme pas APB/MDB pourrait être chargé
Impossible instrument C: \ GitRepos \ AdminPortal \ Source \ test \ AdminPortal. UnitTests \ bin \ Debug \ net461 \ AdminPortal.exe comme aucun PDB/MDB pourrait être chargé ...

Nombre total de tests: 39. Passé: 37. Echec: 0. Ignoré: 2. test Run avec succès. Temps d'exécution du test: 6.4838 Secondes

Validation ...
Aucun résultat, cela peut être dû à un certain nombre de raisons. Les raisons les plus courantes sont:
1) PDB manquants pour les assemblages correspondant au filtre, veuillez consulter le fichier de sortie et reportez-vous au Guide d'utilisation (Usage.rtf) sur les filtres.
2) le profileur peut ne pas être enregistré correctement, veuillez vous référer au guide d'utilisation et à l'interrupteur -register.

Je les fichiers .pdb dans le dossier bin (par exemple C: \ GitRepos \ AdminPortal \ Source \ test \ AdminPortal.UnitTests \ bin \ Debug \ net461 \ AdminPortal.pdb), donc je ne sais pas pourquoi opencover n'a pas pu le charger. Quelle pourrait être la raison?

J'ai essayé de spécifier -targetdir: (comme suggéré here) et -oldStyle, mais cela n'a aucune différence.
J'ai également essayé de spécifier -searchdirs: (de https://github.com/sawilde/opencover/wiki/Usage) et réenregistrer profiler regsvr32 /n /i:user C:OpenCover.4.5.3723\x86\OpenCover.Profiler.dll (De OpenCover/NUnit can't find PDB files) - également faire aucune différence.

Est-ce lié au nouveau format PDB portable mentionné dans https://github.com/OpenCover/opencover/issues/610?
Mais je cible NETFramework v4.6.1, pas Core 1.1. Puis-je spécifier explicitement à dotnet test ou msbuild, quel format PDB utiliser?

Un outil est-il disponible pour afficher, le fichier .PDB a-t-il un ancien format ou un nouveau format? J'ai essayé https://github.com/Microsoft/microsoft-pdb/blob/master/cvdump/cvdump.exe comme suggéré au Reading a .pdb file, mais il ne retourne rien.

Répondre

1

Dans la discussion sans rapport https://developercommunity.visualstudio.com/content/problem/15197/vs2017rc-locks-files-in-obj-folder-blocking-builds.html il a été suggéré à Modifier le format PDB dans les propriétés du projet de PDB portable à PDB complet.
Si vous préférez utiliser l'interface utilisateur, dans Visual Studio, ouvrez Propriétés du projet -> Construire -> Avancé -> Sortie -> Informations sur le débogage passent de Full à Portable. Il ajoutera à la mise en fichier csproj avec état de construction spécifique

<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|netstandard1.6|AnyCPU'"> 
    <DebugType>full</DebugType> 
    <DebugSymbols>True</DebugSymbols> 
    </PropertyGroup> 

Normalement vous voulez appliquer pour toutes les options, donc supprimer la condition d'avoir juste les éléments suivants (Vous pouvez simplement coller l'PropertyGroup ci-dessous pour votre .csproj , si vous n'avez pas utilisé Visual Studio auparavant)

<PropertyGroup > 
    <DebugType>full</DebugType> 
    <DebugSymbols>True</DebugSymbols> 
    </PropertyGroup> 

Et OpenCover sera capable d'instrumentaliser vos projets.

+0

FYI pour toutes les personnes ayant des problèmes d'opencover sur 'core': il y a aussi un problème connu avec l'instrumentation - le 'core' est différent du 'normal' et quand opencover a été amélioré avec une meilleure instrumentation. instrumentation dans le «noyau». Pour être en mesure d'instrumenter des temps d'exécution 'core', le paramètre '-oldstyle' ** doit ** être passé à opencover, pour lui faire utiliser l'ancienne approche d'instrumentation. Voir [numéro 601] (https://github.com/OpenCover/opencover/issues/601) et [numéro 595] (https://github.com/OpenCover/opencover/issues/595) pour obtenir des détails et savoir quand c'est réparé. – quetzalcoatl