Sonar Runner-Fehler treten während der Verarbeitung der .coveragexml-Datei auf, die mit dem MSTest von Visual Studio erstellt wurde

Ich versuche, meine .coveragexml-Datei (nach der Konvertierung der .coverage-Datei) zu verarbeiten, die ich nach der Verwendung von MSTest über die Befehlszeile erhalte, aber Sonar Runner schlägt weiterhin fehl, wenn versucht wird, die Datei zu analysieren. Die Fehler bestehen aus Analysefehlern wie einem unerwarteten '?' sowie nicht in der Lage, das Tag in der Datei zu finden.

Ich habe ein paar Möglichkeiten ausprobiert, um die .coveragexml-Datei zu erhalten: Verwenden der Befehle "vsinstr -coverage ..." und "start vsperfmon -coverage ..." (dann Ausführen von MSTest) über die Befehlszeile, Ändern der .testrunconfig-Datei und Angeben, für welche DLLs ich die Abdeckung erhalten möchte, und Verwenden von "CodeCoverage.exe sammeln ..." versucht. Die ersten beiden haben mir Erfolge beim Abrufen von Codeabdeckungsdaten beschert, aber ich hatte Probleme beim Abrufen von "CodeCoverage.exe collect ...", um Ergebnisse zu sammeln. Obwohl ich aus den ersten beiden Codeabdeckungsergebnissen abrufen kann, scheint die erzeugte .coveragexml-Datei nicht das richtige Format zu haben, das SonarQube akzeptiert, obwohl sie auf ihrer VB.NET-Plugin-Webseite angibt, dass sie MSTest und unterstützt VSTest-XML-Code-Coverage-Dateien. Ich habe versucht, VSTest zu verwenden, und kann meine .coveragexml-Dateien problemlos von Sonarqube akzeptieren. Das Problem ist, dass die Firma, für die ich interniere, MSTest verwendet, um alle ihre Komponententests auszuführen. Ich muss also .coveragexml-Daten von der Verwendung von MSTest abrufen.

Eine andere Sache, die mir aufgefallen ist, war, dass beim Exportieren der Coverage-Datei als Coverage-XML in Visual Studio (sowohl für MSTest als auch für VSTest) ein Coverage-XML-Format erstellt wird, das von Sonarqube nicht akzeptiert wird Fehler, die ich oben erwähnt habe). Wenn ich die .coverage-Datei mit dem Befehl "CodeCoverage.exe analyse ..." aus VSTest konvertiere, wird ein .coveragexml-Format erstellt, das von Sonarqube akzeptiert wird, da ich keine Fehler erhalte und die Ergebnisse der Codeabdeckung im Dashboard angezeigt werden. Wenn ich jetzt versuche, den Befehl "CodeCoverage.exe analyse ..." zum Konvertieren der Coverage-Datei von MSTest zu verwenden, geschieht nichts. Es wird keine .coveragexml-Datei erstellt, und es werden keine Fehler oder Rückmeldungen gegeben. Ich habe auch versucht, eine C # -Methode zu schreiben, um die Coverage-Datei mit Microsoft.VisualStudio.Coverage.Analysis in eine Coveragexml-Datei zu konvertieren. Es wird jedoch die gleiche Coveragexml-Datei im Format erstellt, als würde ich sie aus Visual Studio exportieren.

Andere Dinge, die hilfreich sein könnten, um zu wissen:

Ich führe die Analyse mit VB.NET-Code aus.Ich verwende Version 2.2 des VB.NET-Plugins von Sonarqube.Ich verwende Version 4.3.2 von Sonarqube und Version 2.4 von SonarQube Runner.Ich verwende Visual Studio 2013 Premium.

(SonarQube-Fehler werden ausgegeben) Das Format der .coveragexml-Datei nach dem Export aus Visual Studio sieht folgendermaßen aus:

<CoverageDSPriv>
<xs:schema ...>
  ...
</xs:schema>
<Module>
  <ModuleName>...</ModuleName>
  <ImageSize>...</ImageSize>
  ...
  <NameSpaceTable>
    <BlocksCovered>...</BlocksCovered>
    ...

(SonarQube akzeptiert) Das Format der .coveragexml-Datei nach Verwendung von "CodeCoverage.exe analyse ..." (funktioniert nur mit der .coverage-Datei von VSTest)

<?xml version="1.0" encoding="UTF-8" ?>
<results>
  <modules>
    <module name="..." path="..." id="..." block_coverage="..." line_coverage="..."  blocks_covered="..." ... >
      <functions>
        <function id="..." token="..." name="..." type_name="..." block_coverage="..." >
        ...

Es sieht so aus, als gäbe es zwei völlig unterschiedliche Schemata für diese Daten, und SonarQube akzeptiert nur eines davon. Ist das der Fall? Gibt es eine andere Möglichkeit, die Coverage-Daten in die von SonarQube akzeptierten zu konvertieren?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage