Dela via


.NET SDK- och .NET CLI-telemetri

.NET SDK- innehåller en telemetrifunktion som samlar in användningsdata och skickar dem till Microsoft när du använder .NET CLI--kommandon. Användningsdata innehåller undantagsinformation när .NET CLI kraschar. .NET CLI levereras med .NET SDK och är en uppsättning verb som gör att du kan skapa, testa och publicera dina .NET-appar. Telemetridata hjälper .NET-teamet att förstå hur verktygen används så att de kan förbättras. Information om fel hjälper teamet att lösa problem och åtgärda buggar.

Insamlade data publiceras aggregerat under Creative Commons Attribution License. En del av de insamlade data publiceras på .NET CLI Telemetry Data.

Omfattning

dotnet har två funktioner: att köra appar och köra CLI-kommandon. Telemetri samlas inte in när dotnet används för att starta ett program i följande format:

  • dotnet [path-to-app].dll

Telemetri samlas in när du använder något av .NET CLI-kommandon, till exempel:

  • dotnet build
  • dotnet pack
  • dotnet run

Så här avregistrerar du dig

.NET SDK-telemetrifunktionen är aktiverad som standard för Microsoft-distributioner av SDK. Om du vill välja bort telemetrifunktionen anger du DOTNET_CLI_TELEMETRY_OPTOUT miljövariabeln till 1 eller true.

Installationsprogrammet för .NET SDK skickar en enda telemetripost när en lyckad installation sker. Om du vill avanmäla dig anger du miljövariabeln DOTNET_CLI_TELEMETRY_OPTOUT innan du installerar .NET SDK.

Viktig

Om du vill avanmäla dig när du har startat installationsprogrammet: stäng installationsprogrammet, ange miljövariabeln och kör sedan installationsprogrammet igen med den värdeuppsättningen.

Avslöjande

.NET SDK visar text som liknar följande utdata när du först kör ett av .NET CLI-kommandona (till exempel dotnet build). Texten kan variera något beroende på vilken version av SDK du kör. Den här "första körningsupplevelsen" är hur Microsoft meddelar dig om datainsamling.

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

Om du vill inaktivera det här meddelandet och .NET-välkomstmeddelandet anger du DOTNET_NOLOGO miljövariabeln till true. ** Den här variabeln påverkar inte möjligheten att välja bort telemetri.

Anmärkning

Breaking change: Beteendet för telemetrimeddelanden som skrivs till har ändrats i de senaste versionerna av .NET SDK. För mer information, se dotnet CLI-kommandon loggar icke-relevanta kommandodata till stderr.

Datapunkter

Telemetrifunktionen samlar inte in personuppgifter, till exempel användarnamn eller e-postadresser. Den söker inte igenom koden och extraherar inte data på projektnivå, till exempel namn, lagringsplats eller författare. Det extraherar inte innehållet i datafiler som används eller skapas av dina appar, inte heller dumpar av minne som upptas av dina appars objekt eller innehållet i urklipp. Data skickas säkert till Microsoft-servrar med hjälp av Azure Monitor-teknik . Data lagras under begränsad åtkomst och publiceras under strikta säkerhetskontroller från säkra Azure Storage-system .

Att skydda din integritet är viktigt för Microsoft. Om du misstänker att telemetrin samlar in känsliga data eller om data hanteras på ett osäkert eller olämpligt sätt kan du skapa ett problem på dotnet/sdk-lagringsplatsen .

Mer information om din sekretess och dina personuppgifter som samlas in finns i Microsofts sekretesspolicy.

Följande flikar visar telemetridata som samlas in av SDK-versionen:

  • SDK version 10.0.100 och senare:
    • Hash-projektidentifierare för dotnet run.
    • Programtyp för antingen filbaserad app eller projektbaserad för dotnet run.
    • Startprofilnamnet om det anges för dotnet run.
    • Om en startprofil har angetts för dotnet run.
    • Konfigurationsmodellen för startinställningar som används (om någon) för dotnet run.
    • Antal SDK:er som används för dotnet run.
    • Antal paketreferenser för dotnet run.
    • Antal ProjectReferences för dotnet run.
    • Antal ytterligare egenskaper för filbaserade appar med dotnet run.
    • Om MSBuild användes för filbaserade appar med dotnet run.
    • Om Roslyn-kompilatorn användes för filbaserade appar med dotnet run.
    • Det identifierade LLM-agentnamnet när CLI anropades av en LLM-agent. Mer information finns i LLM-identifiering.
    • global.json Registrerar tillståndet när ett kommando anropas. Tillståndet är ett av följande värden: not_found, giltig, invalid_json eller invalid_data.
    • Vilka MSBuild-aktivitetsfabriker används för att läsa in och köra uppgifter (inklusive infogade C#-uppgifter, flertrådade uppgifter och uppgifter som inte är processbaserade) och hur många uppgifter de utför.
    • Antal MSBuild-uppgifter som körs i TaskHosts jämfört med uppgifter som inte körs i TaskHosts.

Sammanställda alternativ

Vissa kommandon skickar extra data. En delmängd av kommandon skickar det första argumentet:

Befallning Första argumentdata som skickats
dotnet help <arg> Kommandohjälpen efterfrågas.
dotnet new <arg> Mallnamnet (hashat).
dotnet add <arg> Ordet package eller reference.
dotnet remove <arg> Ordet package eller reference.
dotnet list <arg> Ordet package eller reference.
dotnet sln <arg> Ordet add, listeller remove.
dotnet nuget <arg> Ordet delete, localseller push.
dotnet workload <subcommand> <arg> Ordet install, update, list, search, uninstall, repair, restore, och arbetsbelastningsnamnet (hashed).
dotnet tool <subcommand> <arg> Ordet install, update, list, search, uninstall, run och dotnet verktygsnamn (hashad).

En delmängd av kommandon skickar valda alternativ om de används, tillsammans med deras värden:

Alternativ Kommandon
--verbosity Alla kommandon
--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

När SDK:et inte löser ett inbyggt kommando skickar alla kommandomatchare som löser kommandot en hash av kommandonamnet tillsammans med namnet på kommandomatchartypen.

Från och med .NET Core 2.1.100 SDK hashar SDK alla dessa värden förutom --verbosity och --sdk-package-version.

Telemetri för mallmotor

Från och med .NET Core 2.1.100 SDK samlar mallens dotnet new instansieringskommando in extra data för Microsoft-skapade mallar:

  • --framework
  • --auth

dotnet run telemetry

Från och med .NET SDK 10.0.100 dotnet run samlar kommandot in funktionsbaserad telemetri för att bidra till utveckling och användning av filbaserade appar.

Telemetri för alla dotnet run exekveringar:

  • Programtyp (filbaserad eller projektbaserad)
  • Hashat projekt eller filidentifierare
  • Antal SDK:er som används
  • Antal paketreferenser
  • Antal Projektreferenser
  • Starta profilanvändning (om --launch-profile eller --no-launch-profile användes)
  • Om startprofilen är en standardprofil
  • Starta inställningsmodell som tillämpas, om någon

Telemetri endast för filbaserade appar:

  • Antal ytterligare egenskaper (till exempel #:property direktiv)
  • Om MSBuild användes för att bygga
  • Om Roslyn-kompilatorn användes direkt

Telemetri för kraschundantag

Om .NET CLI eller SDK kraschar samlar det in namnet på undantaget och stackspårningen av CLI- eller SDK-koden. .NET CLI samlar in den här informationen för att utvärdera problem och förbättra kvaliteten på .NET SDK och CLI.

.NET CLI samlar endast in information om CLI- eller SDK-undantag, inte undantag i ditt program. De insamlade data innehåller namnet på undantaget och stackspårningen. Den här stackspårningen är av CLI- eller SDK-kod.

I följande exempel visas den typ av data som samlas in:

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)

.NET-deltagare och alla andra som kör en version av .NET SDK som de har skapat själva bör överväga sökvägen till sin SDK-källkod. Om en krasch inträffar när du använder en .NET SDK som är en anpassad felsökningsversion eller konfigureras med anpassade build-symbolfiler, samlas SDK-källfilens sökväg från byggdatorn in som en del av stackspårningen och hashas inte.

Därför bör du inte placera anpassade versioner av .NET SDK i kataloger vars sökvägsnamn exponerar personlig eller känslig information.

Identifiering av kontinuerlig integration

För att identifiera om .NET CLI körs i en miljö för kontinuerlig integrering söker .NET CLI efter förekomst och värden för flera välkända miljövariabler som vanliga CI-providers anger.

I följande lista visas miljövariablerna och hur .NET CLI använder sina värden. .NET CLI samlar inte in värdet för någon miljövariabel. det använder bara värdet för att ange en boolesk flagga.

Variabel(ler) Leverantör Handling
TF_BUILD Azure-pipelines Parsa booleskt värde
GITHUB_ACTIONS GitHub Actions (verktyg för arbetsflöden) Parsa booleskt värde
APPVEYOR Appveyor Parsa booleskt värde
CI Många/mest Parsa booleskt värde
TRAVIS Travis CI Parsa booleskt värde
CIRCLECI CircleCI Parsa booleskt värde
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services CodeBuild Kontrollera om alla finns och inte är null
BUILD_ID, BUILD_URL Jenkins Kontrollera om alla finns och inte är null
BUILD_ID, PROJECT_ID Google Cloud Build Kontrollera om alla finns och inte är null
TEAMCITY_VERSION TeamCity Kontrollera om det finns och inte är null-värde
JB_SPACE_API_URL JetBrains-utrymme Kontrollera om det finns och inte är null-värde

LLM-identifiering

För att identifiera om .NET CLI körs i kontexten för en LLM-agent söker .NET CLI efter förekomsten och värdena för flera miljövariabler som LLM-agenter och AI-kodningsassistenter anger.

I följande tabell visas agentnamnet, miljövariabeln som används för identifiering och värdet för den agenttyp som rapporteras. De faktiska värdena för dessa miljövariabler samlas inte in– de används bara för att identifiera agenttypen.

LLM-agent Variable Värde
GitHub Copilot GITHUB_COPILOT_CLI_MODE copilot
Claude Code CLAUDECODE "claude"
Cursor CURSOR_EDITOR "markör"
Google Gemini GEMINI_CLI "gemini"

Om .NET CLI identifierar flera agenter sammanfogas de olika agentvärdena med ett kommatecken för att generera det slutliga värdet.

Se även