Compartilhar via


Telemetria do SDK do .NET e da CLI do .NET

O SDK do .NET inclui um recurso de telemetria que coleta dados de uso e os envia à Microsoft quando você usa os comandos da .NET CLI . Os dados de uso incluem informações de exceção quando a CLI do .NET falha. A CLI do .NET vem com o SDK do .NET e é o conjunto de verbos que permitem criar, testar e publicar seus aplicativos .NET. Os dados de telemetria ajudam a equipe do .NET a entender como as ferramentas são usadas para que possam ser aprimoradas. Informações sobre falhas ajudam a equipe a resolver problemas e corrigir bugs.

Os dados coletados são publicados de forma agregada sob a licença Creative Commons Attribution . Alguns dos dados coletados são publicados nos Dados de Telemetria da .NET CLI.

Scope

dotnet tem duas funções: executar aplicativos e executar comandos da CLI. A telemetria não é coletada durante o uso de dotnet para iniciar um aplicativo no seguinte formato:

  • dotnet [path-to-app].dll

A telemetria é coletada durante o uso de um dos comandos da CLI do .NET, como:

  • dotnet build
  • dotnet pack
  • dotnet run

Como recusar

O recurso de telemetria do SDK do .NET é habilitado por padrão para distribuições da Microsoft do SDK. Para recusar o recurso de telemetria, defina a variável de ambiente DOTNET_CLI_TELEMETRY_OPTOUT como 1 ou true.

O instalador do SDK do .NET envia uma única entrada de telemetria quando ocorre uma instalação bem-sucedida. Para recusar, defina a variável de ambiente DOTNET_CLI_TELEMETRY_OPTOUT antes de instalar o SDK do .NET.

Importante

Para recusar depois de iniciar o instalador: feche o instalador, defina a variável de ambiente e execute o instalador novamente com esse conjunto de valores.

Divulgação

O SDK do .NET exibe texto semelhante à saída a seguir quando você executa pela primeira vez um dos comandos da CLI do .NET (por exemplo, dotnet build). O texto pode variar ligeiramente dependendo da versão do SDK que você está executando. Essa experiência de "primeira execução" é como a Microsoft notifica você sobre a coleta de dados.

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

Para desabilitar essa mensagem e a mensagem de boas-vindas do .NET, defina a variável de ambiente DOTNET_NOLOGO como true. Esta variável não tem efeito sobre a desativação da telemetria.

Observação

Alteração significativa: O comportamento das mensagens de telemetria gravadas em stderr mudou nas versões recentes do SDK do .NET. Para mais informações, consulte os comandos do dotnet CLI que registram dados não relacionados ao comando no stderr.

Pontos de dados

O recurso de telemetria não coleta dados pessoais, como nomes de usuário ou endereços de email. Ele não verifica seu código e não extrai dados no nível do projeto, como nome, repositório ou autor. Ele não extrai o conteúdo de nenhum arquivo de dados acessado ou criado por seus aplicativos, despejos de qualquer memória ocupada por objetos de seus aplicativos ou o conteúdo da área de transferência. Os dados são enviados com segurança aos servidores microsoft usando a tecnologia do Azure Monitor . Os dados são mantidos sob acesso restrito e publicados sob rígidos controles de segurança de sistemas seguros do Armazenamento do Azure .

Proteger sua privacidade é importante para a Microsoft. Se você suspeitar que a telemetria está coletando dados confidenciais ou se os dados estiverem sendo manipulados de forma insegura ou inadequada, registre um problema no repositório dotnet/sdk .

Para obter mais informações sobre sua privacidade e dados pessoais coletados, consulte a Política de Privacidade da Microsoft.

As abas a seguir mostram os dados de telemetria capturados pela versão do SDK utilizada:

  • SDK versão 10.0.100 e posterior:
    • Identificador de projeto com hash para dotnet run.
    • Tipo de aplicativo baseado em arquivo ou baseado em projeto para dotnet run.
    • Nome do perfil de inicialização, se especificado para dotnet run.
    • Se um perfil de inicialização foi especificado para dotnet run.
    • O modelo de configuração de inicialização usado (se houver) para dotnet run.
    • Número de SDKs usados para dotnet run.
    • Número de PackageReferences para dotnet run.
    • Número de ProjectReferences para dotnet run.
    • Número de propriedades adicionais para aplicativos baseados em arquivo com dotnet run.
    • Se o MSBuild foi usado para aplicativos baseados em arquivo com dotnet run.
    • Se o compilador Roslyn foi usado para aplicativos baseados em arquivo com dotnet run.
    • Caso a CLI tenha sido invocada de um agente LLM, o nome do agente LLM detectado. Para obter mais informações, consulte detecção de LLM.
    • Captura o global.json estado no momento em que um comando é invocado. O estado é um dos seguintes valores: not_found, válido, invalid_json ou invalid_data.
    • Quais fábricas de tarefas do MSBuild são usadas para carregar e executar tarefas (incluindo tarefas em C# embutidas, tarefas com reconhecimento multithread e tarefas fora de processo) e quantas tarefas elas executam.
    • Número de tarefas do MSBuild executadas em TaskHosts versus tarefas não executadas no TaskHosts.

Opções coletadas

Determinados comandos enviam dados extras. Um subconjunto de comandos envia o primeiro argumento:

Comando Dados de primeiro argumento enviados
dotnet help <arg> A ajuda do comando está sendo consultada.
dotnet new <arg> O nome do modelo (com hash).
dotnet add <arg> A palavra package ou reference.
dotnet remove <arg> A palavra package ou reference.
dotnet list <arg> A palavra package ou reference.
dotnet sln <arg> A palavra add, list ou remove.
dotnet nuget <arg> A palavra delete, locals ou push.
dotnet workload <subcommand> <arg> A palavra install, update, list, search, uninstall, repair, restore e o nome da carga de trabalho (hashed).
dotnet tool <subcommand> <arg> A palavra install, update, list, search, uninstall, run e o nome da ferramenta dotnet (hashed).

Um subconjunto de comandos envia opções selecionadas se forem usados, juntamente com seus valores:

Opção Comandos
--verbosity Todos os comandos
--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

Quando o SDK falha ao resolver um comando interno, qualquer resolvedor de comando que resolva com êxito o comando envia um hash do nome do comando junto com o nome do tipo de resolvedor de comando.

Começando com o SDK do .NET Core 2.1.100, o SDK apresenta todos esses valores, exceto para --verbosity e --sdk-package-version.

Telemetria do mecanismo de modelo

A partir do SDK do .NET Core 2.1.100, o comando de instanciação de dotnet new modelo coleta dados extras para modelos criados pela Microsoft:

  • --framework
  • --auth

telemetria de execução de dotnet

A partir do .NET SDK 10.0.100, o dotnet run comando coleta telemetria baseada em funcionalidades para ajudar a impulsionar o desenvolvimento e o uso de aplicativos baseados em arquivos.

Telemetria para todas as dotnet run execuções:

  • Tipo de aplicativo (baseado em arquivo ou baseado em projeto)
  • Identificador de arquivo ou projeto com hash
  • Número de SDKs usados
  • Número de PackageReferences
  • Número de ProjectReferences
  • Iniciar o uso do perfil (se --launch-profile ou --no-launch-profile foi usado)
  • Se o perfil de inicialização é um perfil padrão
  • Modelo de configurações de inicialização aplicado, se houver

Telemetria somente para aplicativos baseados em arquivo:

  • Número de propriedades adicionais (por exemplo, instruções #:property)
  • Se o MSBuild foi usado para compilação
  • Se o compilador Roslyn foi usado diretamente

Telemetria de exceção de falha

Se a CLI do .NET ou o SDK falhar, ele coletará o nome da exceção e o rastreamento de pilha da CLI ou do código do SDK. A CLI do .NET coleta essas informações para avaliar problemas e melhorar a qualidade do SDK e da CLI do .NET.

A CLI do .NET coleta informações apenas para exceções de CLI ou SDK, não exceções em seu aplicativo. Os dados coletados contêm o nome da exceção e o rastreamento de pilha. Esse stack trace é de código CLI ou SDK.

O exemplo a seguir mostra o tipo de dados coletados:

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)

Os colaboradores do .NET e qualquer outra pessoa que execute uma versão do SDK do .NET que eles próprios criaram devem considerar o caminho para o código-fonte do SDK. Se ocorrer uma falha durante o uso de um SDK do .NET que seja um build de depuração personalizado ou configurado com arquivos de símbolo de build personalizado, o caminho do arquivo de origem do SDK do computador de build será coletado como parte do rastreamento de pilha e não terá hash.

Por isso, você não deve colocar builds personalizados do SDK do .NET em diretórios cujos nomes de caminho expõem informações pessoais ou confidenciais.

Detecção de integração contínua

Para detectar se a CLI do .NET está em execução em um ambiente de integração contínua, a CLI do .NET verifica a presença e os valores de várias variáveis de ambiente conhecidas que os provedores de CI comuns definem.

A lista a seguir mostra as variáveis de ambiente e como a CLI do .NET usa seus valores. A CLI do .NET não coleta o valor de nenhuma variável de ambiente; ele usa apenas o valor para definir um sinalizador booliano.

Variável(s) Provedor Ação
TF_BUILD Azure Pipelines Analisar o valor booliano
GITHUB_ACTIONS GitHub Actions Analisar o valor booliano
APPVEYOR Appveyor Analisar o valor booliano
CI Muitos/Mais Analisar o valor booliano
TRAVIS Travis CI Analisar o valor booliano
CIRCLECI CircleCI Analisar o valor booliano
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services (AWS) CodeBuild Verificar se todos estão presentes e são não nulos
BUILD_ID, BUILD_URL Jenkins Verificar se todos estão presentes e são não nulos
BUILD_ID, PROJECT_ID Google Cloud Build (plataforma de construção de nuvem) Verificar se todos estão presentes e são não nulos
TEAMCITY_VERSION TeamCity Verificar se está presente e é não nulo
JB_SPACE_API_URL Espaço JetBrains Verificar se está presente e é não nulo

Detecção de LLM

Para detectar se a CLI do .NET está em execução no contexto de um agente LLM, a CLI do .NET verifica a presença e os valores de várias variáveis de ambiente definidas pelos agentes llm e assistentes de codificação de IA.

A tabela a seguir mostra o nome do agente, a variável de ambiente usada para detecção e o valor do tipo de agente relatado. Os valores reais dessas variáveis de ambiente não são coletados. Eles são usados apenas para identificar o tipo de agente.

Agente LLM Variable Value
GitHub Copilot GITHUB_COPILOT_CLI_MODE copiloto
Código Claude CLAUDECODE "Claude"
Cursor CURSOR_EDITOR cursor
Google Gemini GEMINI_CLI Gêmeos

Se a CLI do .NET detectar vários agentes, concatena os diferentes valores de agente com uma vírgula para produzir o valor final.

Consulte também