Code Coverage-Hilfsprogramm „dotnet-coverage“
Dieser Artikel gilt für: ✔️ .NET Core 3.1 SDK und höher
Übersicht
dotnet-coverage [-h, --help] [--version] <command>
Beschreibung
Das dotnet-coverage
-Tool:
- Ermöglicht die plattformübergreifende Sammlung von Code Coverage-Daten eines laufenden Prozesses.
- Ermöglicht die plattformübergreifende Zusammenführung von Code Coverage-Berichten.
Optionen
-h|--help
Zeigt die Hilfe für die Befehlszeile an.
--version
Zeigt die Version des Hilfsprogramms „dotnet-coverage“ an.
Installieren
Verwenden Sie zum Installieren der neuesten Releaseversion des NuGet-Pakets dotnet-coverage
den Befehl dotnet tool install:
dotnet tool install --global dotnet-coverage
Befehle
Befehl |
---|
dotnet-coverage merge |
dotnet-coverage collect |
dotnet-coverage connect |
dotnet-coverage snapshot |
dotnet-coverage shutdown |
dotnet-coverage instrument |
dotnet-coverage merge
Mithilfe des Befehls merge
werden mehrere Code Coverage-Berichte zu einem zusammengeführt. Dieser Befehl ist auf allen Plattformen verfügbar. Dieser Befehl unterstützt die folgenden Code Coverage-Berichtsformate:
coverage
cobertura
xml
Übersicht
dotnet-coverage merge
[--remove-input-files]
[-o|--output <output>] [-f|--output-format <output-format>]
[-l|--log-file <log-file>] [-ll|--log-level <log-level>] [-?|-h|--help]
<files>
Argumente
<files>
Die Code Coverage-Eingabeberichte.
Optionen
--remove-input-files
Entfernt alle eingegebenen Coverageberichte, die zusammengeführt wurden.
-r, --recursive
.NET 7 SDK und frühere Versionen suchen nur nach Code-Coverage-Berichten in Unterverzeichnissen.
-o|--output <output>
Legt die Code Coverage-Berichtsausgabedatei fest.
-f|--output-format <output-format>
Das Format der Ausgabedatei. Unterstützte Werte:
coverage
,xml
undcobertura
. Standardwert:coverage
(binäres Format, das in Visual Studio geöffnet werden kann).-l|--log-file <log-file>
Legt den Protokolldateipfad fest. Wenn Sie ein Verzeichnis (mit einem Pfadtrennzeichen am Ende) angeben, wird für jeden analysierten Prozess eine neue Protokolldatei generiert.
-ll|--log-level <log-level>
Legt die Protokollierungsebene fest. Unterstützte Werte:
Error
,Info
undVerbose
.
dotnet-coverage collect
Mit dem Befehl collect
werden Code Coverage-Daten für einen beliebigen .NET-Prozess und seine Unterprozesse gesammelt. Beispielsweise können Sie Code Coverage-Daten für eine Konsolenanwendung oder eine Blazor-Anwendung sammeln. Dieser Befehl unterstützt die dynamische und die statische Instrumentierung. Die statische Instrumentierung ist auf allen Plattformen verfügbar. Sie können mithilfe der Option include-files
angeben, dass Dateien statisch instrumentiert werden sollen. Die dynamische Instrumentierung ist unter Windows (x86, x64 und Arm64), Linux (x64) und macOS (x64) verfügbar. Der Befehl unterstützt nur .NET-Module. Native Module werden nicht unterstützt.
Übersicht
Der Befehl collect
kann in zwei Modi ausgeführt werden.
Befehlsmodus
Der Befehl collect
sammelt Code Coverage-Daten für den angegebenen Prozess, der vom Argument command
ausgeführt wird.
dotnet-coverage collect
[-s|--settings <settings>] [-id|--session-id <session-id>]
[-if|--include-files <include-files>] [-o|--output <output>]
[-f|--output-format <output-format>] [-l|--log-file <log-file>]
[-ll|--log-level <log-level>] [-?|-h|--help]
<command> <args>
Servermodus
Der Befehl collect
hostet einen Server für die Sammlung von Code Coverage-Daten. Clients können über den Befehl connect
eine Verbindung mit dem Server herstellen.
dotnet-coverage collect
[-s|--settings <settings>] [-id|--session-id <session-id>]
[-sv|--server-mode] [-b|--background] [-t|--timeout]
[-if|--include-files <include-files>] [-o|--output <output>]
[-f|--output-format <output-format>] [-l|--log-file <log-file>]
[-ll|--log-level <log-level>] [-?|-h|--help]
Argumente
<command>
Der Befehl, für den Code Coverage-Daten gesammelt werden sollen.
<args>
Die Befehlszeilenargumente für den Befehl.
Optionen
-s|--settings <settings>
Legt den Pfad zu den XML-Code Coverage-Einstellungen fest.
-id|--session-id <session-id>
Gibt die Code Coverage-Sitzungs-ID an. Falls keine Angabe vorliegt, generiert das Tool eine zufällige GUID.
-sv|--server-mode
Startet den Collector im Servermodus. Clients können mithilfe des Befehls
connect
eine Verbindung mit dem Server herstellen.-b|--background
Startet den Server für die Code Coverage-Sammlung in einem neuen Hintergrundprozess. Clients können mithilfe des Befehls
connect
eine Verbindung mit dem Server herstellen.-t|--timeout
Timeout (in Millisekunden) für die prozessübergreifende Kommunikation zwischen Clients und dem Server.
-if|--include-files <include-files>
Gibt eine Liste der Dateien an, die statisch instrumentiert werden sollen.
-o|--output <output>
Legt die Code Coverage-Berichtsausgabedatei fest.
-f|--output-format <output-format>
Das Format der Ausgabedatei. Unterstützte Werte:
coverage
,xml
undcobertura
. Standardwert:coverage
(binäres Format, das in Visual Studio geöffnet werden kann).-l|--log-file <log-file>
Legt den Protokolldateipfad fest. Wenn Sie ein Verzeichnis (mit einem Pfadtrennzeichen am Ende) angeben, wird für jeden analysierten Prozess eine neue Protokolldatei generiert.
-ll|--log-level <log-level>
Legt die Protokollierungsebene fest. Unterstützte Werte:
Error
,Info
undVerbose
.
dotnet-coverage connect
Der Befehl connect
wird verwendet, um eine Verbindung mit dem vorhandenen Server herzustellen und Code Coverage-Daten für jeden .NET-Prozess und die zugehörigen Teilprozesse zu sammeln. Beispielsweise können Sie Code Coverage-Daten für eine Konsolenanwendung oder eine Blazor-Anwendung sammeln. Der Befehl unterstützt nur .NET-Module. Native Module werden nicht unterstützt.
Hinweis
Der Befehl verwendet die dynamische Instrumentierung für alle Teilprozesse, die unter Windows (x86, x64 und Arm64), Linux (x64) und macOS (x64) verfügbar sind. Wenn Sie ein .NET-Modul statisch instrumentieren müssen, verwenden Sie den Befehl instrument
(mit entsprechender Sitzungs-ID-Option), bevor Sie den Befehl connect
ausführen.
Übersicht
dotnet-coverage connect
[-b|--background] [-t|--timeout]
[-l|--log-file <log-file>] [-ll|--log-level <log-level>] [-?|-h|--help]
<session>
<command> <args>
Argumente
<session>
Die Sitzungs-ID des Servers, der vom Befehl
collect
angegeben wird.<command>
Der Befehl, für den Code Coverage-Daten gesammelt werden sollen.
<args>
Die Befehlszeilenargumente für den Befehl.
Tastatur
-b|--background
Startet den Client in einem neuen Hintergrundprozess.
-t|--timeout
Timeout (in Millisekunden) für die prozessübergreifende Kommunikation zwischen Clients und dem Server.
-l|--log-file <log-file>
-l|--log-file <log-file>
Legt den Protokolldateipfad fest. Wenn Sie ein Verzeichnis (mit einem Pfadtrennzeichen am Ende) angeben, wird für jeden analysierten Prozess eine neue Protokolldatei generiert.
-ll|--log-level <log-level>
Legt die Protokollierungsebene fest. Unterstützte Werte:
Error
,Info
undVerbose
.
dotnet-coverage snapshot
Erstellt eine Coveragedatei für eine vorhandene Code Coverage-Sammlung.
Übersicht
dotnet-coverage snapshot
[-r|--reset]
[-o|--output <output>]
[-tn|--tag-name <tag-name>] [-tid|--tag-identifier <tag-identifier>]
[-t|--timeout]
[-l|--log-file <log-file>] [-ll|--log-level <log-level>] [-?|-h|--help]
<session>
Argumente
<session>
Die Sitzungs-ID der Sammlung, für die eine Coveragedatei generiert werden soll.
Tastatur
-r|--reset <reset>
Löscht vorhandene Coverageinformationen, nachdem eine Coveragedatei erstellt wurde.
-o|--output <output>
Legt die Code Coverage-Berichtsausgabedatei fest. Wenn hier kein Wert angegeben ist, wird die Datei automatisch mit einem Zeitstempel generiert.
-tn|--tag-name <tag-name>
Erstellt einen Momentaufnahme-Tagnamen in der Abdeckungsdatei mit aktuellen Informationen zur Abdeckung. Tagname und Tagbezeichner schließen sich gegenseitig ein.
-tid|--tag-identifier <tag-identifier>
Erstellt einen Momentaufnahme-Tagbezeichner in der Abdeckungsdatei mit aktuellen Informationen zur Abdeckung. Tagname und Tagbezeichner schließen sich gegenseitig ein.
-t|--timeout
Timeout (in Millisekunden) für die prozessübergreifende Kommunikation zwischen Clients und dem Server.
-l|--log-file <log-file>
Legt den Protokolldateipfad fest. Wenn Sie ein Verzeichnis (mit einem Pfadtrennzeichen am Ende) angeben, wird für jeden analysierten Prozess eine neue Protokolldatei generiert.
-ll|--log-level <log-level>
Legt die Protokollierungsebene fest. Unterstützte Werte:
Error
,Info
undVerbose
.
dotnet-coverage shutdown
Schließt die vorhandene Code Coverage-Sammlung.
Übersicht
dotnet-coverage shutdown
[-t|--timeout]
[-l|--log-file <log-file>] [-ll|--log-level <log-level>] [-?|-h|--help]
<session>
Argumente
<session>
Die Sitzungs-ID der Sammlung, die geschlossen werden soll.
Optionen
-t|--timeout
Timeout (in Millisekunden) für die prozessübergreifende Kommunikation mit dem Server.
-l|--log-file <log-file>
Legt den Protokolldateipfad fest. Wenn Sie ein Verzeichnis (mit einem Pfadtrennzeichen am Ende) angeben, wird für jeden analysierten Prozess eine neue Protokolldatei generiert.
-ll|--log-level <log-level>
Legt die Protokollierungsebene fest. Unterstützte Werte:
Error
,Info
undVerbose
.
dotnet-coverage instrument
Der Befehl „instrument“ wird zum Instrumentieren von Binärdateien auf dem Datenträger verwendet.
Übersicht
dotnet-coverage instrument
[-s|--settings <settings>] [-id|--session-id <session-id>]
[-o|--output <output>] [-l|--log-file <log-file>]
[-ll|--log-level <log-level>] [-?|-h|--help]
<input-file>
Argumente
<input-file>
Die Eingabebinärdatei.
Optionen
-s|--settings <settings>
Legt den Pfad zu den XML-Code Coverage-Einstellungen fest.
-id|--session-id <session-id>
Gibt die Code Coverage-Sitzungs-ID an. Falls keine Angabe vorliegt, generiert das Tool eine zufällige GUID.
-o|--output <output>
Legt den Pfad zur Ausgabedateibinärdatei fest. Andernfalls wird eine direkte Instrumentierung durchgeführt.
-l|--log-file <log-file>
Legt den Protokolldateipfad fest. Wenn Sie ein Verzeichnis (mit einem Pfadtrennzeichen am Ende) angeben, wird für jeden analysierten Prozess eine neue Protokolldatei generiert.
-ll|--log-level <log-level>
Legt die Protokollierungsebene fest. Unterstützte Werte:
Error
,Info
undVerbose
.
Beispielszenarios
Sammeln von Code Coverage
Sammeln Sie mit dem folgenden Befehl Code Coverage-Daten für eine beliebige .NET-Anwendung (z. B. Konsole oder Blazor):
dotnet-coverage collect dotnet run
Im Fall einer Anwendung, für deren Beendigung ein Signal erforderlich ist, können Sie STRG+C verwenden – damit können Sie weiterhin Code Coverage-Daten sammeln. Als Argument können Sie einen beliebigen Befehl bereitstellen, der letztlich eine .NET-App startet. Das kann beispielsweise ein PowerShell-Skript sein.
Sitzungen
Wenn Sie eine Code Coverage-Analyse auf einem .NET-Server ausführen, der nur auf Nachrichten wartet und Antworten sendet, benötigen Sie eine Möglichkeit, den Server anzuhalten, um endgültige Code Coverage-Ergebnisse zu erhalten. Sie können STRG+C lokal, aber nicht in Azure Pipelines verwenden. Für diese Szenarien können Sie Sitzungen verwenden. Sie können beim Starten der Sammlung eine Sitzungs-ID angeben und dann den Befehl shutdown
verwenden, um die Sammlung und den Server anzuhalten.
Angenommen, Sie verfügen über einen Server im Verzeichnis D:\serverexample\server und ein Testprojekt im Verzeichnis D:\serverexample\tests. Tests kommunizieren mit dem Server über das Netzwerk. Sie können die Code Coverage-Sammlung für den Server wie folgt starten:
D:\serverexample\server> dotnet-coverage collect --session-id serverdemo "dotnet run"
Die Sitzungs-ID wurde als serverdemo
angegeben. Anschließend können Sie Tests wie folgt ausführen:
D:\serverexample\tests> dotnet test
Eine Code Coverage-Datei für die Sitzung serverdemo
kann wie folgt mit aktueller Coverage generiert werden:
dotnet-coverage snapshot --output after_first_test.coverage serverdemo
Außerdem kann der Abdeckungsdatei mithilfe von Tagoptionen wie folgt ein Momentaufnahme-Tag hinzugefügt werden:
dotnet-coverage snapshot --tag-name after_first_test --tag-identifier after_first_test serverdemo
Abschließend können die Sitzung serverdemo
und der Server wie folgt geschlossen werden:
dotnet-coverage shutdown serverdemo
Im Folgenden finden Sie ein Beispiel für die vollständige Ausgabe auf Serverseite:
D:\serverexample\server> dotnet-coverage collect --session-id serverdemo "dotnet run"
SessionId: serverdemo
Waiting for a connection... Connected!
Received: Hello!
Sent: HELLO!
Waiting for a connection... Code coverage results: output.coverage.
D:\serverexample\server>
Server-Client-Modus
Die Code Coverage-Sammlung kann auch im Server-Client-Modus erfolgen. In diesem Szenario wird ein Code Coverage-Sammlungsserver gestartet, und mehrere Clients können eine Verbindung mit dem Server herstellen. Die Code Coverage wird für alle Clients gemeinsam gesammelt.
Starten Sie den Code Coverage-Server mit dem folgenden Befehl:
dotnet-coverage collect --session-id serverdemo --server-mode
In diesem Beispiel wurde die Sitzungs-ID serverdemo
für den Server angegeben. Ein Client kann mit dem folgenden Befehl und dieser Sitzungs-ID eine Verbindung mit dem Server herstellen:
dotnet-coverage connect serverdemo dotnet run
Schließlich können Sie die Sitzung serverdemo
und den Server mit dem folgenden Befehl schließen:
dotnet-coverage shutdown serverdemo
Der Serverprozess erstellt einen gemeinsamen Code Coverage-Bericht für alle Clients und wird beendet.
Im Folgenden finden Sie ein Beispiel für die vollständige Ausgabe auf Serverseite:
D:\serverexample\server> dotnet-coverage collect --session-id serverdemo --server-mode
SessionId: serverdemo
// Server will be in idle state and wait for connect and shutdown commands
Code coverage results: output.coverage.
D:\serverexample\server>
Nachfolgend sehen Sie ein Beispiel für die vollständige Ausgabe auf Clientseite:
D:\serverexample\server> dotnet-coverage connect serverdemo ConsoleApplication.exe World
Hello World!!
D:\serverexample\server> dotnet-coverage connect serverdemo WpfApplication.exe
D:\serverexample\server> dotnet-coverage shutdown serverdemo
D:\serverexample\server>
Sie können sowohl den Server als auch den Client im Hintergrundmodus starten. Ein weiterer Prozess wird im Hintergrund gestartet und gibt die Steuerung an den Benutzer zurück.
Nachfolgend sehen Sie ein Beispiel für die vollständige Ausgabe im Server-Client-Modus im Hintergrund:
D:\serverexample\server> dotnet-coverage collect --session-id serverdemo --server-mode --background
D:\serverexample\server> dotnet-coverage connect --background serverdemo ConsoleApplication.exe World
D:\serverexample\server> dotnet-coverage connect --background serverdemo WpfApplication.exe
D:\serverexample\server> dotnet-coverage shutdown serverdemo
D:\serverexample\server>
Statische Code Coverage für verwaltete Assemblys
Das Tool „dotnet-coverage“ kann verwendet werden, um unter Verwendung einer statischen Instrumentierung die Code Coverage für verwaltete Assemblys zu sammeln. Es gibt drei verschiedene Methoden, die Sie verwenden können. Nehmen wir zu Demozwecken eine einfache C#-Konsolenanwendung an:
D:\examples\ConsoleApp> dotnet run
Hello, World!
Verwenden des Befehls „collect“ mit Option „--include-files“ oder Konfiguration
Wenn Sie den Befehl instrument
nicht verwenden möchten, können die zu instrumentierenden Dateien mithilfe Option --include-files
wie folgt angegeben werden:
D:\examples\ConsoleApp> dotnet-coverage collect --include-files .\bin\Debug\net7.0\*.dll dotnet run
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
SessionId: 57862ec0-e512-49a5-8b66-2804174680fc
Hello, World!
Code coverage results: output.coverage.
Sie können die zu instrumentierenden Dateien auch mithilfe einer Konfiguration wie der folgenden angeben:
<ModulePaths>
<IncludeDirectories>
<Directory>D:\examples\ConsoleApp\bin\Debug\net7.0</Directory>
</IncludeDirectories>
</ModulePaths>
Verwenden der Befehle „Instrument“ und „Sammeln“
In diesem Fall muss die erste Binärdatei wie folgt instrumentiert werden:
D:\examples\ConsoleApp> dotnet-coverage instrument .\bin\Debug\net7.0\ConsoleApp.dll
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
Input file successfully instrumented.
Anschließend können Sie Code Coverage wie folgt sammeln:
D:\examples\ConsoleApp> dotnet-coverage collect .\bin\Debug\net7.0\ConsoleApp.exe
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
SessionId: a09e6bef-ff64-4b5f-8bb8-fc495ebb50ba
Hello, World!
Code coverage results: output.coverage.
Verwenden der Befehle „instrument“ und „collect“ im Servermodus
In diesem Fall können Sie die Coveragesammlung vollständig von der Ausführung Ihrer Anwendung trennen. Instrumentieren Sie zuerst Ihre Binärdatei wie folgt:
D:\examples\ConsoleApp> dotnet-coverage instrument --session-id 73c34ce5-501c-4369-a4cb-04d31427d1a4 .\bin\Debug\net7.0\ConsoleApp.dll
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
Input file successfully instrumented.
Hinweis
Die Sitzungs-ID muss in diesem Szenario verwendet werden, um sicherzustellen, dass die Anwendung eine Verbindung herstellen und Daten an den externen Collector bereitstellen kann.
Im zweiten Schritt müssen Sie den Coverage-Collector wie folgt starten:
D:\examples\ConsoleApp> dotnet-coverage collect --session-id 73c34ce5-501c-4369-a4cb-04d31427d1a4 --server-mode
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
SessionId: 73c34ce5-501c-4369-a4cb-04d31427d1a4
Anschließend kann die Anwendung wie folgt gestartet werden:
D:\examples\ConsoleApp> .\bin\Debug\net7.0\ConsoleApp.exe
Hello, World!
Schließlich kann der Collector wie folgt geschlossen werden:
D:\examples\ConsoleApp> dotnet-coverage shutdown 73c34ce5-501c-4369-a4cb-04d31427d1a4
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
Einstellungen
Sie können eine Datei mit Einstellungen angeben, wenn Sie den Befehl collect
verwenden. Mithilfe der Einstellungsdatei können einige Module oder Methoden von der Code Coverage-Analyse ausgeschlossen werden. Das Format entspricht dem der Datensammlerkonfiguration in einer runsettings-Datei. Weitere Informationen finden Sie unter Anpassen der Code Coverage-Analyse. Hier sehen Sie ein Beispiel:
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
<CodeCoverage>
<!--
Additional paths to search for .pdb (symbol) files. Symbols must be found for modules to be instrumented.
If .pdb files are in the same folder as the .dll or .exe files, they are automatically found. Otherwise, specify them here.
Note that searching for symbols increases code coverage run time. So keep this small and local.
-->
<SymbolSearchPaths>
<Path>C:\Users\User\Documents\Visual Studio 2012\Projects\ProjectX\bin\Debug</Path>
<Path>\\mybuildshare\builds\ProjectX</Path>
</SymbolSearchPaths>
<!--
About include/exclude lists:
Empty "Include" clauses imply all; empty "Exclude" clauses imply none.
Each element in the list is a regular expression (ECMAScript syntax). See /visualstudio/ide/using-regular-expressions-in-visual-studio.
An item must first match at least one entry in the include list to be included.
Included items must then not match any entries in the exclude list to remain included.
-->
<!-- Match assembly file paths: -->
<ModulePaths>
<Include>
<ModulePath>.*\.dll$</ModulePath>
<ModulePath>.*\.exe$</ModulePath>
</Include>
<Exclude>
<ModulePath>.*CPPUnitTestFramework.*</ModulePath>
</Exclude>
<!-- Additional directories from .NET assemblies should be statically instrumented: -->
<IncludeDirectories>
<Directory Recursive="true">C:\temp</Directory>
</IncludeDirectories>
</ModulePaths>
<!-- Match fully qualified names of functions: -->
<!-- (Use "\." to delimit namespaces in C# or Visual Basic, "::" in C++.) -->
<Functions>
<Exclude>
<Function>^Fabrikam\.UnitTest\..*</Function>
<Function>^std::.*</Function>
<Function>^ATL::.*</Function>
<Function>.*::__GetTestMethodInfo.*</Function>
<Function>^Microsoft::VisualStudio::CppCodeCoverageFramework::.*</Function>
<Function>^Microsoft::VisualStudio::CppUnitTestFramework::.*</Function>
</Exclude>
</Functions>
<!-- Match attributes on any code element: -->
<Attributes>
<Exclude>
<!-- Don't forget "Attribute" at the end of the name -->
<Attribute>^System\.Diagnostics\.DebuggerHiddenAttribute$</Attribute>
<Attribute>^System\.Diagnostics\.DebuggerNonUserCodeAttribute$</Attribute>
<Attribute>^System\.CodeDom\.Compiler\.GeneratedCodeAttribute$</Attribute>
<Attribute>^System\.Diagnostics\.CodeAnalysis\.ExcludeFromCodeCoverageAttribute$</Attribute>
</Exclude>
</Attributes>
<!-- Match the path of the source files in which each method is defined: -->
<Sources>
<Exclude>
<Source>.*\\atlmfc\\.*</Source>
<Source>.*\\vctools\\.*</Source>
<Source>.*\\public\\sdk\\.*</Source>
<Source>.*\\microsoft sdks\\.*</Source>
<Source>.*\\vc\\include\\.*</Source>
</Exclude>
</Sources>
<!-- Match the company name property in the assembly: -->
<CompanyNames>
<Exclude>
<CompanyName>.*microsoft.*</CompanyName>
</Exclude>
</CompanyNames>
<!-- Match the public key token of a signed assembly: -->
<PublicKeyTokens>
<!-- Exclude Visual Studio extensions: -->
<Exclude>
<PublicKeyToken>^B77A5C561934E089$</PublicKeyToken>
<PublicKeyToken>^B03F5F7F11D50A3A$</PublicKeyToken>
<PublicKeyToken>^31BF3856AD364E35$</PublicKeyToken>
<PublicKeyToken>^89845DCD8080CC91$</PublicKeyToken>
<PublicKeyToken>^71E9BCE111E9429C$</PublicKeyToken>
<PublicKeyToken>^8F50407C4E9E73B6$</PublicKeyToken>
<PublicKeyToken>^E361AF139669C375$</PublicKeyToken>
</Exclude>
</PublicKeyTokens>
<EnableStaticManagedInstrumentation>True</EnableStaticManagedInstrumentation>
<EnableDynamicManagedInstrumentation>True</EnableDynamicManagedInstrumentation>
</CodeCoverage>
</Configuration>
Zusammenführen von Code Coverage-Berichten
Sie können a.coverage
und b.coverage
wie folgt zusammenführen und die Daten in merged.coverage
speichern:
dotnet-coverage merge -o merged.coverage a.coverage b.coverage
Wenn Sie beispielsweise einen Befehl wie dotnet test --collect "Code Coverage"
ausführen, wird der Coveragebericht in einem Ordner gespeichert, der mit einer zufälligen GUID benannt wird. Solche Ordner sind schwierig zu finden und zusammenzuführen. Mit diesem Tool können Sie alle Code-Coverage-Berichte für alle Projekte mithilfe von Globmustern zusammenführen:
dotnet-coverage merge -o merged.cobertura.xml -f cobertura **\*.coverage
Der obige Befehl führt alle Coverage-Berichte aus dem aktuellen Verzeichnis und allen Unterverzeichnissen zusammen und speichert das Ergebnis in einer Cobertura-Datei. In Azure Pipelines können Sie die Aufgabe Code Coverage-Ergebnisse veröffentlichen verwenden, um einen zusammengeführten Cobertura-Bericht zu veröffentlichen.
Sie können den Befehl merge
verwenden, um einen Code Coverage-Bericht in ein anderes Format zu konvertieren. Beispielsweise konvertiert der folgende Befehl einen binären Code Coverage-Bericht in das XML-Format.
dotnet-coverage merge -o output.xml -f xml input.coverage