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-Paketsdotnet-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 und cobertura. 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 und Verbose.

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 und cobertura. 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 und Verbose.

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 und Verbose.

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 und Verbose.

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 und Verbose.

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 und Verbose.

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

Siehe auch