Sdílet prostřednictvím


Telemetrie .NET SDK a .NET CLI

Sada .NET SDK obsahuje funkci telemetrie, která shromažďuje data o využití a odesílá je do Microsoftu při použití příkazů .NET CLI. Data o využití zahrnují informace o výjimce, když dojde k havárii nástroje příkazového řádku .NET CLI. .NET CLI se dodává se sadou .NET SDK a je sada příkazů, které umožňují sestavovat, testovat a publikovat aplikace .NET. Telemetrická data pomáhají týmu .NET pochopit, jak se nástroje používají, aby je bylo možné vylepšit. Informace o selháních pomáhají týmu vyřešit problémy a opravit chyby.

Shromážděná data jsou publikována v agregaci v rámci licence Creative Commons Attribution. Některá shromážděná data jsou publikována na .NET CLI Telemetry Data.

Scope

dotnet má dvě funkce: spouštění aplikací a spouštění příkazů rozhraní příkazového řádku. Telemetrie se neshromažďuje při použití dotnet k spuštění aplikace v následujícím formátu:

  • dotnet [path-to-app].dll

Telemetrie se shromažďují při použití některého z příkazů CLI .NET , například:

  • dotnet build
  • dotnet pack
  • dotnet run

Jak se odhlásit

Funkce telemetrie sady .NET SDK je ve výchozím nastavení povolená pro distribuce sady SDK od Microsoftu. Pokud chcete vyjádřit nesouhlas s funkcí telemetrie, nastavte proměnnou prostředí DOTNET_CLI_TELEMETRY_OPTOUT na 1 nebo true.

Instalační program sady .NET SDK odešle jednu položku telemetrie, když proběhne úspěšná instalace. Pokud chcete vyjádřit výslovný nesouhlas, nastavte před instalací sady .NET SDK proměnnou prostředí DOTNET_CLI_TELEMETRY_OPTOUT.

Důležitý

Pokud se chcete odhlásit po spuštění instalačního programu: zavřete instalační program, nastavte proměnnou prostředí a spusťte instalační program znovu s danou sadou hodnot.

Zveřejnění

Sada .NET SDK zobrazí text podobný následujícímu výstupu při prvním spuštění jednoho z příkazů .NET CLI (například dotnet build). Text se může mírně lišit v závislosti na verzi sady SDK, kterou používáte. Toto prostředí "první spuštění" je způsob, jakým vás Microsoft upozorní na shromažďování dat.

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

Chcete-li tuto zprávu a uvítací zprávu .NET zakázat, nastavte proměnnou prostředí DOTNET_NOLOGO na true. Tato proměnná nemá žádný vliv na možnost odhlášení z telemetrie.

Poznámka:

Zlomová změna: Chování zpráv telemetrie zapsaných do stderr se změnilo v posledních verzích sady .NET SDK. Další informace naleznete v tématu příkazy CLI dotnet zaznamenávají data nesouvisející s příkazy na stderr.

Datové body

Funkce telemetrie neshromažďuje osobní údaje, jako jsou uživatelská jména nebo e-mailové adresy. Neskenuje kód a neextrahuje data na úrovni projektu, jako je název, úložiště nebo autor. Neextrahuje obsah žádných datových souborů, které jsou přístupné nebo vytvořené vašimi aplikacemi, výpisy paměti obsazené objekty vašich aplikací ani obsah schránky. Data se bezpečně odesílají na servery Microsoftu pomocí technologie Azure Monitoru . Data se uchovávají v omezeném přístupu a publikuje se v rámci striktních kontrolních mechanismů zabezpečení ze zabezpečených systémů Azure Storage .

Ochrana osobních údajů je pro Microsoft důležitá. Pokud máte podezření, že telemetrie shromažďuje citlivá data nebo jsou nezabezpečená nebo nevhodně zpracována, založte problém v úložišti dotnet/sdk .

Další informace o vašich osobních údajích a shromažďovaných osobních údajích najdete v prohlášení společnosti Microsoft o zásadách ochrany osobních údajů.

Na následujících kartách jsou zobrazená telemetrická data zachycená verzí sady SDK:

  • SDK verze 10.0.100 a novější:
    • Hashovaný identifikátor projektu pro dotnet run.
    • Typ aplikace založené na souborech nebo projektu pro dotnet run.
    • Název spouštěcího profilu, pokud je zadán pro dotnet run.
    • Zda byl zadán spouštěcí profil pro dotnet run.
    • Konfigurační model nastavení spuštění (pokud existuje) pro dotnet run.
    • Počet SDK sad použitých pro dotnet run.
    • Počet odkazů na balíček pro dotnet run.
    • Počet argumentů ProjectReferences pro dotnet run.
    • Počet dalších vlastností pro aplikace založené na souborech s dotnet run.
    • Zda msBuild byl použit pro souborové aplikace s dotnet run.
    • Zda byl kompilátor Roslyn použit pro souborové aplikace s dotnet run.
    • Zjištěný název agenta LLM, pokud bylo příkazové rozhraní vyvoláno z agenta LLM. Další informace najdete v tématu Detekce LLM.
    • Zachytí global.json stav v době, kdy se vyvolá příkaz. Stav je jedna z následujících hodnot: not_found, platné, invalid_json nebo invalid_data.
    • Které továrny úloh MSBuild se používají k načítání a spouštění úloh (včetně vložených úloh jazyka C#, úloh pracujících s více vlákny a úkolů mimo zpracování) a počtu spuštěných úkolů.
    • Počet úloh MSBuild spuštěných v TaskHosts versus úkoly, které nejsou provedeny v TaskHosts.

Shromažďované možnosti

Některé příkazy odesílají další data. Podmnožina příkazů odešle první argument:

Příkaz Odeslaná data prvního argumentu
dotnet help <arg> Na nápovědu k příkazu se dotazuje.
dotnet new <arg> Název šablony (zahashovaný).
dotnet add <arg> Slovo package nebo reference.
dotnet remove <arg> Slovo package nebo reference.
dotnet list <arg> Slovo package nebo reference.
dotnet sln <arg> Slovo add, list, nebo remove.
dotnet nuget <arg> Slovo delete, locals, nebo push.
dotnet workload <subcommand> <arg> Slovo install, update, list, search, uninstall, repair, restore a název úlohy (hashováno).
dotnet tool <subcommand> <arg> Slovo install, update, list, search, uninstall, run a název nástroje dotnet (hashováno).

Podmnožina příkazů odesílá vybrané možnosti, pokud se použijí, spolu s jejich hodnotami:

Možnost Příkazy
--verbosity Všechny příkazy
--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

Pokud se sadě SDK nepodaří přeložit předdefinovaný příkaz, jakýkoli překladač příkazů, který úspěšně přeloží příkaz, odešle hodnotu hash názvu příkazu spolu s názvem typu překladače příkazů.

Počínaje .NET Core 2.1.100 SDK, hashuje všechny tyto hodnoty kromě --verbosity a --sdk-package-version.

Telemetrie modulu šablon

Počínaje sadou .NET Core 2.1.100 SDK dotnet new shromažďuje příkaz vytvoření instance šablony další data pro šablony vytvořené Microsoftem:

  • --framework
  • --auth

dotnet run telemetry

Počínaje sadou .NET SDK 10.0.100 začíná příkaz dotnet run shromažďovat telemetrii zaměřenou na funkce, která pomáhá řídit vývoj a využití aplikací pracujících se soubory.

Telemetrie pro všechna dotnet run spuštění:

  • Typ aplikace (souborový nebo projektový)
  • Hashovaný projekt nebo identifikátor souboru
  • Počet použitých SDK
  • Počet odkazů na balíčky
  • Počet odkazů na projekty
  • Použití profilu spuštění (ať už byl použit --launch-profile nebo --no-launch-profile)
  • Určuje, jestli je spouštěcí profil výchozím profilem.
  • Použitý model nastavení spuštění, pokud existuje

Telemetrie jenom pro souborové aplikace:

  • Počet dalších vlastností (například #:property direktivy)
  • Určuje, zda se nástroj MSBuild použil během sestavení.
  • Zda byl kompilátor Roslyn použit přímo

Telemetrie výjimek a pádů

Pokud dojde k chybovému ukončení rozhraní příkazového řádku nebo sady SDK .NET, shromáždí název výjimky a trasování zásobníku kódu rozhraní příkazového řádku nebo sady SDK. Rozhraní příkazového řádku .NET shromáždí tyto informace za účelem posouzení problémů a zlepšení kvality sady .NET SDK a rozhraní příkazového řádku.

Rozhraní příkazového řádku .NET shromažďuje informace pouze pro výjimky rozhraní příkazového řádku nebo sady SDK, nikoli výjimky ve vaší aplikaci. Shromážděná data obsahují název výjimky a trasování zásobníku. Toto trasování zásobníku pochází z kódu CLI nebo SDK.

Následující příklad ukazuje druh shromážděných dat:

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)

Přispěvatelé .NET a všichni ostatní, kteří používají verzi sady .NET SDK, kterou sami vytvořili, by měli zvážit cestu ke zdrojovému kódu sady SDK. Pokud dojde k chybě při použití sady .NET SDK, která je vlastní ladící sestavení nebo nakonfigurované s vlastními soubory symbolů sestavení, cesta ke zdrojovému souboru SDK z počítače, na kterém proběhlo sestavení, se shromažďuje jako součást trasování zásobníku a není zahešovaná.

Z tohoto důvodu byste neměli umístit vlastní sestavení sady .NET SDK do adresářů, jejichž názvy cest zveřejňují osobní nebo citlivé informace.

Detekce kontinuální integrace

Pokud chcete zjistit, jestli rozhraní příkazového řádku .NET CLI běží v prostředí kontinuální integrace, rozhraní příkazového řádku .NET kontroluje přítomnost a hodnoty několika dobře známých proměnných prostředí, které nastavují běžní poskytovatelé CI.

Následující seznam ukazuje proměnné prostředí a způsob, jakým rozhraní příkazového řádku .NET CLI používá jejich hodnoty. .NET CLI neshromažďuje hodnotu žádné proměnné prostředí; používá ji pouze k nastavení logického příznaku.

Proměnné Poskytovatel Akce
TF_BUILD Azure Pipelines Analyzovat logickou hodnotu
GITHUB_ACTIONS GitHub Actions Analyzovat logickou hodnotu
APPVEYOR Appveyor Analyzovat logickou hodnotu
CI Mnoho/Většina Analyzovat logickou hodnotu
TRAVIS Travis CI Analyzovat logickou hodnotu
CIRCLECI CircleCI Analyzovat logickou hodnotu
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services CodeBuild Zkontrolujte, jestli jsou všechny položky přítomné a nenulové.
BUILD_ID, BUILD_URL Jenkins Zkontrolujte, jestli jsou všechny položky přítomné a nenulové.
BUILD_ID, PROJECT_ID Google Cloud Build Zkontrolujte, jestli jsou všechny položky přítomné a nenulové.
TEAMCITY_VERSION TeamCity Zkontrolujte, zda je přítomný a nenulový
JB_SPACE_API_URL JetBrains Space Zkontrolujte, zda je přítomný a nenulový

Detekce LLM

Pokud chcete zjistit, jestli rozhraní příkazového řádku .NET CLI běží v kontextu agenta LLM, rozhraní příkazového řádku .NET kontroluje přítomnost a hodnoty několika proměnných prostředí, které nastavují agenti LLM a pomocníki pro kódování AI.

Následující tabulka ukazuje název agenta, proměnnou prostředí použitou k detekci a hodnotu typu agenta, který je hlášen. Skutečné hodnoty těchto proměnných prostředí se neshromažďují – slouží pouze k identifikaci typu agenta.

Agent LLM Variable Hodnota
GitHub Copilot GITHUB_COPILOT_CLI_MODE kopilot
Kód Claude CLAUDECODE claude
Cursor CURSOR_EDITOR "kurzor"
Google Gemini GEMINI_CLI Gemini

Pokud rozhraní příkazového řádku .NET zjistí více agentů, zřetězí různé hodnoty agenta čárkou a vytvoří konečnou hodnotu.

Viz také