Udostępnij przez


Telemetria zestawu .NET SDK i CLI platformy .NET

Zestaw SDK platformy .NET zawiera funkcję telemetrii, która zbiera dane użycia i wysyła je do firmy Microsoft podczas korzystania z poleceń interfejsu wiersza polecenia platformy .NET. Dane użycia zawierają informacje o wyjątkach, gdy dojdzie do awarii .NET CLI. Narzędzie CLI platformy .NET jest dostarczane z zestawem .NET SDK i zawiera zestaw poleceń, które umożliwiają tworzenie, testowanie i publikowanie aplikacji platformy .NET. Dane telemetryczne pomagają zespołowi platformy .NET zrozumieć, jak są używane narzędzia, aby można je było ulepszyć. Informacje na temat niepowodzeń ułatwiają zespołowi rozwiązywanie problemów i naprawianie usterek.

Zebrane dane są publikowane w ramach licencji Creative Commons Attribution License. Niektóre zebrane dane są publikowane w dane telemetryczne interfejsu wiersza polecenia platformy .NET.

Scope

dotnet ma dwie funkcje: uruchamianie aplikacji i wykonywanie poleceń interfejsu wiersza polecenia. Dane telemetryczne nie są zbierane podczas korzystania z dotnet w celu uruchomienia aplikacji w następującym formacie:

  • dotnet [path-to-app].dll

Dane telemetryczne są zbierane podczas korzystania z dowolnego z poleceń interfejsu wiersza polecenia platformy .NET platformy .NET, takich jak:

  • dotnet build
  • dotnet pack
  • dotnet run

Jak zrezygnować

Funkcja telemetrii zestawu .NET SDK jest domyślnie włączona dla dystrybucji zestawu SDK firmy Microsoft. Aby zrezygnować z funkcji telemetrii, ustaw zmienną środowiskową DOTNET_CLI_TELEMETRY_OPTOUT na 1 lub true.

Instalator zestawu .NET SDK wysyła pojedynczy wpis telemetrii po pomyślnej instalacji. Aby zrezygnować, przed zainstalowaniem zestawu SDK platformy .NET ustaw zmienną środowiskową DOTNET_CLI_TELEMETRY_OPTOUT.

Ważny

Aby zrezygnować po uruchomieniu instalatora: zamknij instalatora, ustaw zmienną środowiskową, a następnie uruchom instalatora ponownie z tym zestawem wartości.

Ujawnienie

Zestaw .NET SDK wyświetla tekst podobny do następujących wyników po pierwszym uruchomieniu jednego z poleceń .NET CLI (na przykład dotnet build). Tekst może się nieco różnić w zależności od używanej wersji zestawu SDK. Doświadczenie "pierwszego uruchomienia" służy do powiadamiania Cię przez Microsoft o zbieraniu danych.

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

Aby wyłączyć ten komunikat i komunikat powitalny platformy .NET, ustaw zmienną środowiskową DOTNET_NOLOGO na true. Ta zmienna nie ma wpływu na rezygnację z telemetrii.

Uwaga / Notatka

Zmiana powodująca niezgodność: Zmieniło się zachowanie komunikatów telemetrycznych zapisywanych do stderr w najnowszych wersjach pakietu .NET SDK. Aby uzyskać więcej informacji, zobacz dotnet CLI commands log non-command-relevant data to stderr (Polecenia interfejsu wiersza polecenia dotnet logują dane inne niż polecenia dotyczące narzędzia stderr).

Punkty danych

Funkcja telemetrii nie zbiera danych osobowych, takich jak nazwy użytkowników lub adresy e-mail. Nie skanuje ono kodu i nie wyodrębnia danych na poziomie projektu, takich jak nazwa, repozytorium lub autor. Nie wyodrębnia zawartości plików danych, do których uzyskują dostęp lub które są tworzone przez aplikacje, zrzutów pamięci zajmowanej przez obiekty aplikacji ani zawartości schowka. Dane są bezpiecznie wysyłane do serwerów firmy Microsoft przy użyciu technologii Azure Monitor . Dane są przechowywane w ramach ograniczonego dostępu i publikowane pod ścisłą kontrolą bezpieczeństwa z systemów usługi Azure Storage o podwyższonym poziomie bezpieczeństwa.

Ochrona prywatności jest ważna dla firmy Microsoft. Jeśli podejrzewasz, że dane telemetryczne zbierają poufne dane lub dane są niezabezpieczone lub niewłaściwie obsługiwane, zgłoś problem w repozytorium dotnet/sdk .

Aby uzyskać więcej informacji na temat prywatności i danych osobowych zebranych, zobacz Zasady zachowania poufności informacji firmy Microsoft.

Na poniższych kartach są wyświetlane dane telemetryczne przechwycone przez wersję zestawu SDK:

  • Zestaw SDK w wersji 10.0.100 lub nowszej:
    • Zahaszowany identyfikator projektu dla projektu dotnet run.
    • Typ aplikacji opartej na plikach lub oparty na projekcie dla programu dotnet run.
    • Nazwa profilu uruchamiania, jeśli jest określona dla dotnet run.
    • Czy określono profil uruchamiania dla elementu dotnet run.
    • Model konfiguracji ustawień uruchamiania używany (jeśli istnieje) dla programu dotnet run.
    • Liczba zestawów SDK używanych dla programu dotnet run.
    • Liczba PackageReferences dotycząca elementu dotnet run.
    • Liczba ProjectReferences dla elementu dotnet run.
    • Liczba dodatkowych właściwości aplikacji bazujących na plikach w kontekście dotnet run.
    • Czy program MSBuild był używany dla aplikacji opartych na plikach za pomocą polecenia dotnet run.
    • Czy kompilator Roslyn był używany dla aplikacji opartych na plikach za pomocą polecenia dotnet run.
    • Wykryta nazwa agenta LLM, jeśli interfejs wiersza polecenia został wywołany przez agenta LLM. Aby uzyskać więcej informacji, zobacz Wykrywanie llM.
    • Przechwytuje stan global.json w momencie wywołania polecenia. Stan jest jedną z następujących wartości: not_found, prawidłowe, invalid_json lub invalid_data.
    • Które fabryki zadań MSBuild są używane do ładowania i uruchamiania zadań (w tym wbudowanych zadań C#, zadań wielowątkowych i zadań działających poza procesem), a także ile zadań jest wykonywanych.
    • Liczba zadań programu MSBuild wykonanych w taskHosts w porównaniu z zadaniami, które nie są wykonywane w taskHosts.

Zebrane opcje

Niektóre polecenia wysyłają dodatkowe dane. Podzestaw poleceń wysyła pierwszy argument:

Polecenie Wysłane pierwsze dane argumentu
dotnet help <arg> Pomoc polecenia jest odpytywana.
dotnet new <arg> Nazwa szablonu (zahashowana).
dotnet add <arg> Wyraz package lub reference.
dotnet remove <arg> Wyraz package lub reference.
dotnet list <arg> Wyraz package lub reference.
dotnet sln <arg> Wyraz add, listlub remove.
dotnet nuget <arg> Wyraz delete, localslub push.
dotnet workload <subcommand> <arg> Wyrazy install, update, list, search, uninstall, repair, restore i nazwa obciążenia (skrót).
dotnet tool <subcommand> <arg> Wyraz install, update, list, search, uninstall, run oraz nazwę narzędzia dotnet (zaszyfrowana).

Podzestaw poleceń wysyła wybrane opcje, jeśli są używane, wraz z ich wartościami:

Opcja Polecenia
--verbosity Wszystkie polecenia
--language dotnet new
--configuration dotnet build, , dotnet clean, dotnet publish, , dotnet rundotnet test
--framework dotnet build, , dotnet clean, dotnet publish, dotnet run, , dotnet testdotnet vstest
--runtime dotnet build, dotnet publish
--platform dotnet vstest
--logger dotnet vstest
--sdk-package-version dotnet migrate

Gdy zestaw SDK nie może rozpoznać wbudowanego polecenia, dowolny program rozpoznawania poleceń, który pomyślnie rozpozna polecenie, wysyła skrót nazwy polecenia wraz z nazwą typu rozpoznawania poleceń.

Począwszy od zestawu .NET Core 2.1.100 SDK, zestaw SDK skrótuje wszystkie te wartości z wyjątkiem elementów --verbosity i --sdk-package-version.

Telemetria silnika szablonów

Począwszy od pakietu SDK .NET Core 2.1.100, polecenie instancji szablonu dotnet new zbiera dodatkowe dane dla szablonów opracowanych przez firmę Microsoft.

  • --framework
  • --auth

dotnet run telemetry

Począwszy od zestawu .NET SDK 10.0.100, dotnet run polecenie zbiera dane telemetryczne oparte na funkcjach, aby ułatwić tworzenie i używanie aplikacji opartych na plikach.

Telemetria dla wszystkich dotnet run wykonań:

  • Typ aplikacji (oparty na plikach lub oparty na projekcie)
  • Haszowany identyfikator projektu lub pliku
  • Liczba używanych zestawów SDK
  • Liczba PackageReferences
  • Liczba odwołań projektowych
  • Sposób użycia profilu uruchomienia (czy --launch-profile lub --no-launch-profile został użyty)
  • Czy profil uruchamiania jest profilem domyślnym
  • Uruchom model ustawień zastosowany, jeśli istnieje

Dane telemetryczne tylko dla aplikacji opartych na plikach:

  • Liczba dodatkowych właściwości (na przykład #:property dyrektywy)
  • Czy program MSBuild był używany do kompilowania
  • Czy kompilator Roslyn był używany bezpośrednio

Telemetria wyjątku krytycznego

Jeśli CLI lub zestaw SDK platformy .NET ulegnie awarii, zbiera nazwę wyjątku i ślad stosu kodu CLI lub SDK. Interfejs wiersza polecenia platformy .NET zbiera te informacje, aby ocenić problemy i poprawić jakość zestawu .NET SDK i interfejsu wiersza polecenia.

Interfejs wiersza polecenia platformy .NET zbiera informacje dotyczące tylko wyjątków interfejsu wiersza polecenia lub zestawu SDK, a nie wyjątków w aplikacji. Zebrane dane zawierają nazwę wyjątku i ślad stosu. Ten ślad stosu pochodzi z kodu CLI lub SDK.

W poniższym przykładzie przedstawiono rodzaj zebranych danych:

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)

Współautorzy platformy .NET i wszyscy inni, którzy uruchamiają wersję zestawu .NET SDK, którą utworzyli, powinni rozważyć ścieżkę do kodu źródłowego zestawu SDK. Jeśli wystąpi awaria podczas korzystania z pakietu .NET SDK będącego niestandardową kompilacją debugowania lub skonfigurowanego z niestandardowymi plikami symboli, ścieżka pliku źródłowego SDK z kompilującej maszyny jest zbierana jako część śledzenia stosu i nie jest haszowana.

W związku z tym nie należy umieszczać niestandardowych kompilacji zestawu .NET SDK w katalogach, których nazwy ścieżek ujawniają informacje osobiste lub poufne.

Ciągłe wykrywanie integracji

Aby wykryć, czy interfejs wiersza polecenia platformy .NET jest uruchomiony w środowisku ciągłej integracji, interfejs wiersza polecenia platformy .NET sprawdza obecność i wartości kilku dobrze znanych zmiennych środowiskowych ustawionych przez typowych dostawców ciągłej integracji.

Na poniższej liście przedstawiono zmienne środowiskowe i sposób, w jaki interfejs wiersza polecenia platformy .NET używa ich wartości. Interfejs wiersza polecenia platformy .NET nie zbiera wartości żadnej zmiennej środowiskowej; używa tylko wartości do ustawienia flagi logicznej.

Zmienne Dostawca Akcja
TF_BUILD Azure Pipelines Analizowanie wartości logicznej
GITHUB_ACTIONS GitHub Actions Analizowanie wartości logicznej
APPVEYOR Appveyor Analizowanie wartości logicznej
CI Wiele/większość Analizowanie wartości logicznej
TRAVIS Ciągła integracja usługi Travis Analizowanie wartości logicznej
CIRCLECI Okrąg — ciągła integracja Analizowanie wartości logicznej
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services CodeBuild (usługa do budowy i testowania kodu) Sprawdź, czy wszystkie są obecne i nie mają wartości null
BUILD_ID, BUILD_URL Jenkins Sprawdź, czy wszystkie są obecne i nie mają wartości null
BUILD_ID, PROJECT_ID Google Cloud Build Sprawdź, czy wszystkie są obecne i nie mają wartości null
TEAMCITY_VERSION TeamCity Sprawdź, czy istnieje i nie jest puste
JB_SPACE_API_URL Przestrzeń JetBrains Sprawdź, czy istnieje i nie jest puste

Wykrywanie LLM

Aby wykryć, czy interfejs wiersza polecenia platformy .NET jest uruchomiony w kontekście agenta LLM, interfejs wiersza polecenia platformy .NET sprawdza obecność i wartości kilku zmiennych środowiskowych ustawionych przez agentów LLM i asystentów kodowania sztucznej inteligencji.

W poniższej tabeli przedstawiono nazwę agenta, zmienną środowiskową używaną do wykrywania i wartość zgłaszanego typu agenta. Rzeczywiste wartości tych zmiennych środowiskowych nie są zbierane — są używane tylko do identyfikowania typu agenta.

Agent LLM Variable Wartość
GitHub Copilot GITHUB_COPILOT_CLI_MODE współpilot
Claude Code CLAUDECODE Claude
Cursor CURSOR_EDITOR kursor
Google Gemini GEMINI_CLI "Bliźnięta"

Jeśli interfejs wiersza polecenia platformy .NET wykryje wielu agentów, łączy różne wartości agenta z przecinkami w celu wygenerowania wartości końcowej.

Zobacz też