Freigeben über


.NET SDK und .NET CLI-Telemetrie

Das .NET SDK- enthält ein Telemetriefeature, das Nutzungsdaten sammelt und an Microsoft sendet, wenn Sie .NET CLI--Befehle verwenden. Die Verwendungsdaten enthalten Ausnahmeinformationen, wenn die .NET CLI abstürzt. Die .NET CLI enthält das .NET SDK und ist der Satz von Verben, mit denen Sie Ihre .NET-Apps erstellen, testen und veröffentlichen können. Telemetriedaten helfen dem .NET-Team zu verstehen, wie die Tools verwendet werden, damit sie verbessert werden können. Informationen zu Fehlern helfen dem Team, Probleme zu beheben und Fehler zu korrigieren.

Die gesammelten Daten werden im Aggregat unter der Creative Commons Attribution Licenseveröffentlicht. Einige der gesammelten Daten werden unter .NET CLI-Telemetriedaten veröffentlicht.

Bereich

dotnet verfügt über zwei Funktionen: Zum Ausführen von Apps und zum Ausführen von CLI-Befehlen. Es werden keine Telemetriedaten erfasst, wenn dotnet zum Starten einer Anwendung im folgenden Format verwendet wird:

  • dotnet [path-to-app].dll

Es werden Telemetriedaten erfasst, wenn einer der .NET-CLI-Befehle verwendet wird, zum Beispiel:

  • dotnet build
  • dotnet pack
  • dotnet run

So melden Sie sich ab

Das .NET SDK-Telemetriefeature ist standardmäßig für Microsoft-Distributionen des SDK aktiviert. Um die Telemetriefunktion zu deaktivieren, legen Sie die umgebungsvariable DOTNET_CLI_TELEMETRY_OPTOUT auf 1 oder truefest.

Ein einzelner Telemetrieeintrag wird auch vom .NET SDK-Installationsprogramm gesendet, wenn eine erfolgreiche Installation erfolgt. Um dies zu deaktivieren, legen Sie die DOTNET_CLI_TELEMETRY_OPTOUT Umgebungsvariable fest, bevor Sie das .NET SDK installieren.

Wichtig

Wenn Sie sich abmelden möchten, nachdem Sie das Installationsprogramm gestartet haben: Schließen Sie das Installationsprogramm, legen Sie die Umgebungsvariable fest, und führen Sie das Installationsprogramm dann erneut mit diesem Wertsatz aus.

Enthüllung

Das .NET SDK zeigt einen Text an, der dem folgenden ähnelt, wenn Sie zum ersten Mal einen der .NET CLI-Befehle (z. B. dotnet build) ausführen. Text kann geringfügig variieren, je nachdem, welche Version des SDK Sie ausführen. Über diese erste Ausführung benachrichtigt Microsoft Sie über die Datensammlung.

Telemetry
---------
The .NET tools collect usage data in order to help us improve your experience. The data is collected by Microsoft and shared with the community. You can opt-out of telemetry by setting the DOTNET_CLI_TELEMETRY_OPTOUT environment variable to '1' or 'true' using your favorite shell.

Read more about .NET CLI Tools telemetry: https://aka.ms/dotnet-cli-telemetry

Um diese Nachricht und die .NET-Willkommensnachricht zu deaktivieren, legen Sie die DOTNET_NOLOGO Umgebungsvariable auf truefest. Beachten Sie, dass diese Variable keine Auswirkungen auf die Telemetrie-Abmeldung hat.

Datenpunkte

Das Telemetriefeature sammelt keine personenbezogenen Daten, z. B. Benutzernamen oder E-Mail-Adressen. Ihr Code wird nicht gescannt und es werden keine Projektdaten auf der Ebene des Projekts extrahiert, wie Name, Repository oder Autor. Es extrahiert nicht den Inhalt von Datendateien, auf die von Ihren Apps zugegriffen wird oder die von Ihren Apps erstellt werden. Darüber hinaus werden keine Speicherabbilder des von den App-Objekten belegten Speichers oder die Inhalte der Zwischenablage extrahiert. Die Daten werden sicher an Microsoft-Server mit Azure Monitor Technologie gesendet, unter eingeschränktem Zugriff gehalten und unter strengen Sicherheitskontrollen von sicheren Azure Storage-Systemen veröffentlicht.

Der Schutz Ihrer Privatsphäre ist uns wichtig. Wenn Sie vermuten, dass die Telemetrie vertrauliche Daten sammelt oder die Daten unsicher oder unangemessen behandelt werden, erstellen Sie ein Problem im dotnet/sdk Repository oder kontaktieren Sie dotnet@microsoft.com per E-Mail zur weiteren Untersuchung.

Das Telemetriefeature sammelt die folgenden Daten:

SDK-Versionen Daten
Alle Den Zeitstempel des Aufrufs
Alle Den aufgerufenen Befehl (zum Beispiel „build“), ab Version 2.1 gehasht
Alle Drei-Oktett-IP-Adresse, die verwendet wird, um den geografischen Standort zu bestimmen.
Alle Betriebssystem und Version.
Alle Die Runtime-ID (RID), auf der das SDK ausgeführt wird
Alle .NET SDK-Version.
Alle Telemetrieprofil: Ein optionaler Wert, der nur mit ausdrücklicher Zustimmung des Benutzers genutzt und intern bei Microsoft verwendet wird.
>=2.0 Befehlsargumente und -optionen: Mehrere Argumente und Optionen werden gesammelt (keine beliebigen Zeichenfolgen). Weitere Informationen finden Sie unter Gesammelte Optionen. Ab Version 2.1.300 gehasht
>=2.0 Gibt an, ob das SDK in einem Container ausgeführt wird.
>=2.0 Zielframeworks (aus dem Ereignis TargetFramework), ab Version 2.1 gehasht
>=2.0 MAC-Adresse (Media Access Control) mit Hashwert (SHA256).
>=2.0 Das derzeitige Arbeitsverzeichnis mit Hash.
>=2.0 Erfolgsbericht zur Installation mit gehashtem EXE-Dateinamen
>=2.1.300 Kernelversion
>=2.1.300 Libc-Version
>=3.0.100 Gibt an, ob die Ausgabe umgeleitet wurde (wahr oder falsch).
>=3.0.100 Bei einem CLI- bzw. SDK-Absturz der Ausnahmetyp und seine Stapelüberwachung (es ist nur CLI- bzw. SDK-Code in der gesendeten Stapelüberwachung enthalten) Weitere Informationen finden Sie unter Telemetrie zu Absturzausnahmen.
>=5.0.100 TargetFrameworkVersion mit Hash für Build (MSBuild-Eigenschaft)
>=5.0.100 RuntimeIdentifier mit Hash für Build (MSBuild-Eigenschaft)
>=5.0.100 „SelfContained“ mit Hash für Build (MSBuild-Eigenschaft)
>=5.0.100 „UseApphost“ mit Hash für Build (MSBuild-Eigenschaft)
>=5.0.100 OutputType mit Hash für Build (MSBuild-Eigenschaft)
>=5.0.201 „PublishReadyToRun“ mit Hash für Build (MSBuild-Eigenschaft)
>=5.0.201 „PublishTrimmed“ mit Hash für Build (MSBuild-Eigenschaft)
>=5.0.201 „PublishSingleFile“ mit Hash für Build (MSBuild-Eigenschaft)
>=5.0.202 Verstrichene Zeit vom Prozessstart bis zur Eingabe der Main-Methode des CLI-Programms, Messung des Host- und Laufzeitstarts
>=5.0.202 Verstrichene Zeit für den Schritt, der dem Pfad bei der ersten Ausführung .NET-Tools hinzufügt
>=5.0.202 Verstrichene Zeit zum Anzeigen des Hinweises der erstmaligen Verwendung bei der ersten Ausführung
>=5.0.202 Verstrichene Zeit zum Generieren des ASP.NET-Zertifikats bei der ersten Ausführung
>=5.0.202 Verstrichene Zeit zum Analysieren der CLI-Eingabe
>=6.0.100 Betriebssystemarchitektur
>=6.0.104 „PublishReadyToRunUseCrossgen2“ mit Hash für Build (MSBuild-Eigenschaft)
>=6.0.104 „Crossgen2PackVersion“ mit Hash für Build (MSBuild-Eigenschaft)
>=6.0.104 „CompileListCount“ mit Hash für Build (MSBuild-Eigenschaft)
>=6.0.104 „_ReadyToRunCompilationFailures“ mit Hash für Build (MSBuild-Eigenschaft)
>=6.0.300 Wenn die CLI aus einer Continuous Integration-Umgebung aufgerufen wurde. Weitere Informationen finden Sie unter Continuous Integration-Erkennung.
>=7.0.100 „PublishAot“ mit Hash für Build (MSBuild-Eigenschaft)
>=7.0.100 „PublishProtocol“ mit Hash für Build (MSBuild-Eigenschaft)
>=8.0.100 TargetPlatformIdentifier mit Hash für Build (MSBuild-Eigenschaft)
>=8.0.100 HybridGlobalization mit Hash für Build (MSBuild-Eigenschaft)
>=8.0.100 Gibt an, ob .NET Blazor WebAssembly SDK verwendet wird.
>=8.0.100 Gibt an, ob .NET WebAssembly SDK verwendet wird.
>=8.0.100 Gibt an, ob .NET MAUI verwendet wird.
>=8.0.100 Gibt an, ob .NET Mobile SDK verwendet wird.
>=8.0.100 Ob andere mobile SDKs verwendet werden (wie: Avalonia, Uno).
>=8.0.100 Gibt an, ob Mono AOT verwendet wird.
>=8.0.100 Gibt an, ob das Mono AOT Strip IL-Feature verwendet wird.
>=8.0.100 Gibt an, ob Mono-Dolmetscher verwendet wird.
>=8.0.100 Gibt an, ob der Bibliotheksmodus für mobile Geräte verwendet wird.
>=8.0.100 Gibt an, ob NativeAOT verwendet wird.
>=8.0.100 Verwendete Mono-Laufzeitpaketversion.

Gesammelte Optionen

Bestimmte Befehle senden zusätzliche Daten. Eine Teilmenge von Befehlen sendet das erste Argument:

Befehl Erste Argumentdaten gesendet
dotnet help <arg> Die Hilfe für den Befehl wird abgefragt.
dotnet new <arg> Der Name der Vorlage (gehasht)
dotnet add <arg> Die Wörter package oder reference
dotnet remove <arg> Die Wörter package oder reference
dotnet list <arg> Die Wörter package oder reference
dotnet sln <arg> Die Wörter add, list oder remove
dotnet nuget <arg> Die Wörter delete, locals oder push
dotnet workload <subcommand> <arg> Das Wort install, update, list, search, uninstall, repair, restore und der Workloadname (mit Hash).
dotnet tool <subcommand> <arg> Das Wort install, update, list, search, uninstall, run und der Dotnet-Toolname (mit Hash).

Eine Teilmenge von Befehlen sendet ausgewählte Optionen, wenn sie verwendet werden, zusammen mit ihren Werten:

Option Befehle
--verbosity Alle Befehle
--language dotnet new
--configuration dotnet build, dotnet clean, dotnet publish, dotnet run, dotnet test
--framework dotnet build, dotnet clean, dotnet publish, dotnet run, dotnet test, dotnet vstest
--runtime dotnet build, dotnet publish
--platform dotnet vstest
--logger dotnet vstest
--sdk-package-version dotnet migrate

Wenn das SDK einen integrierten Befehl nicht auflösen kann, sendet jeder Befehlslöser, der den Befehl erfolgreich aufgelöst hat, einen Hash des Befehlsnamens zusammen mit dem Namen des Befehlslösertyps.

Mit Ausnahme von --verbosity und --sdk-package-version werden alle anderen Werte ab dem .NET Core SDK, Version 2.1.100 gehasht.

Telemetrie der Vorlagen-Engine

Der Befehl dotnet new zur Instanziierung von Vorlagen sammelt zusätzliche Daten für die von Microsoft erstellten Vorlagen, beginnend mit dem .NET Core 2.1.100 SDK:

  • --framework
  • --auth

Telemetrie zu Absturzausnahmen

Wenn die .NET-CLI bzw. das SDK abstürzt, sammelt es den Namen der Ausnahme und die Stapelüberwachung des CLI- bzw. SDK-Codes. Diese Informationen werden gesammelt, um Probleme zu bewerten und die Qualität des .NET SDK und der CLI zu verbessern. Dieser Artikel enthält Informationen zu den von uns erfassten Daten. Außerdem finden Sie Tipps dazu, wie Benutzer, die eine eigene Version des .NET SDK erstellen, die versehentliche Offenlegung von persönlichen oder vertraulichen Informationen vermeiden können.

Die .NET CLI sammelt nur Informationen für CLI/SDK-Ausnahmen, nicht ausnahmen in Ihrer Anwendung. Die erfassten Daten enthalten den Namen der Ausnahme und die Stapelüberwachung. Diese Stapelüberwachung besteht aus CLI- bzw. SDK-Code.

Das folgende Beispiel zeigt die Art der gesammelten Daten:

System.IO.IOException
at System.ConsolePal.WindowsConsoleStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
at System.IO.StreamWriter.Write(Char[] buffer)
at System.IO.TextWriter.WriteLine()
at System.IO.TextWriter.SyncTextWriter.WriteLine()
at Microsoft.DotNet.Cli.Utils.Reporter.WriteLine()
at Microsoft.DotNet.Tools.Run.RunCommand.EnsureProjectIsBuilt()
at Microsoft.DotNet.Tools.Run.RunCommand.Execute()
at Microsoft.DotNet.Tools.Run.RunCommand.Run(String[] args)
at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, ITelemetry telemetryClient)
at Microsoft.DotNet.Cli.Program.Main(String[] args)

Continuous Integration-Erkennung

Um zu erkennen, ob die .NET CLI in einer kontinuierlichen Integrationsumgebung ausgeführt wird, überprüft die .NET CLI das Vorhandensein und die Werte mehrerer bekannter Umgebungsvariablen, die von gängigen CI-Anbietern festgelegt werden.

Die vollständige Liste der Umgebungsvariablen und was mit deren Werten gemacht wird, wird unten angezeigt. Beachten Sie, dass der Wert der Umgebungsvariablen nie erfasst wird, sondern nur zum Festlegen eines booleschen Flags verwendet wird.

Variable(n) Anbieter Aktion
TF_BUILD Azure-Pipelines Parsen des booleschen Werts
GITHUB_ACTIONS GitHub-Aktionen Parsen des booleschen Werts
APPVEYOR Appveyor Parsen des booleschen Werts
CI Many/Most Parsen des booleschen Werts
TRAVIS Travis CI Parsen des booleschen Werts
CIRCLECI CircleCI Parsen des booleschen Werts
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services CodeBuild Überprüfen, ob alle Variablen vorhanden und ungleich NULL sind
BUILD_ID, BUILD_URL Jenkins Überprüfen, ob alle Variablen vorhanden und ungleich NULL sind
BUILD_ID, PROJECT_ID Google Cloud Build Überprüfen, ob alle Variablen vorhanden und ungleich NULL sind
TEAMCITY_VERSION TeamCity Überprüfen, ob Variablen vorhanden und ungleich NULL sind
JB_SPACE_API_URL JetBrains Space Überprüfen, ob Variablen vorhanden und ungleich NULL sind

Versehentliche Offenlegung von Informationen vermeiden

.NET-Mitwirkende und andere Personen, die eine Version des .NET SDK ausführen, die sie selbst erstellt haben, sollten den Pfad zu ihrem SDK-Quellcode berücksichtigen. Wenn ein Absturz bei der Verwendung eines .NET SDK auftritt, bei dem es sich um einen benutzerdefinierten Debugbuild handelt oder der mit benutzerdefinierten Buildsymboldateien konfiguriert ist, wird der Pfad der SDK-Quelldatei auf dem Buildcomputer als Teil der Stapelüberwachung zwar erfasst, aber nicht gehasht.

Aus diesem Fall sollten sich benutzerdefinierte Builds des .NET SDK nicht in Verzeichnissen befinden, deren Pfadnamen persönliche oder vertrauliche Informationen verfügbar machen.

Weitere Informationen