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.
Escopo
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
.
Uma única entrada de telemetria também é enviada pelo instalador do SDK do .NET 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 ao seguinte 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
. Observe que essa variável não tem efeito sobre a desativação da telemetria.
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 para os servidores Microsoft usando a tecnologia Azure Monitor, mantidos em acesso restrito e publicados sob controles de segurança rigorosos por meio dos sistemas seguros do Armazenamento do Azure.
Proteger sua privacidade é importante para nós. Se você suspeitar que a telemetria está coletando dados confidenciais ou se os dados estão sendo manipulados de forma insegura ou inadequada, registre um problema no repositório dotnet/sdk ou envie um email para dotnet@microsoft.com para investigação.
O recurso de telemetria coleta os seguintes dados:
Versões do SDK | Dados |
---|---|
Todos | Marca temporal da invocação. |
Tudo | Comando invocado (por exemplo, "build"), com hash no 2.1 em diante. |
Tudo | Três endereços IP de octeto usados para determinar a localização geográfica. |
Todos | Sistema operacional e versão. |
Tudo | RID (ID de runtime) em que o SDK está em execução. |
Todos | Versão do SDK do .NET. |
Tudo | Perfil de telemetria: um valor opcional usado apenas com a aceitação explícita do usuário e usado internamente na Microsoft. |
>=2.0 | Argumentos e opções de comando: vários argumentos e opções são coletados (não cadeias de caracteres arbitrárias). Confira Opções coletadas. Com hash após 2.1.300. |
>=2.0 | Se o SDK está em execução em um contêiner. |
>=2.0 | Estruturas de destino (do evento TargetFramework ), com hash começando em 2.1. |
>=2.0 | Endereço MAC (Controle de Acesso à Mídia) hacheado (SHA256). |
>=2.0 | Diretório de trabalho atual criptografado. |
>=2.0 | Relatório de sucesso da instalação, com o nome do arquivo exe do instalador em hash. |
>=2,1.300 | Versão do kernel. |
>=2,1.300 | Versão/liberação da Libc. |
>=3.0.100 | Se a saída foi redirecionada (true ou false). |
>=3.0.100 | Em uma falha da CLI/do SDK, o tipo de exceção e seu rastreamento de pilha (somente o código da CLI/do SDK é incluído no rastreamento de pilha enviado). Para saber mais, consulte Telemetria de exceção de falha. |
>=5.0.100 | Versão do Framework de Destino criptografada usada para compilação (propriedade do MSBuild) |
>=5.0.100 | Hashed RuntimeIdentifier usado para compilação (propriedade MSBuild) |
>=5.0.100 | Hashed SelfContained usado para compilação (propriedade MSBuild) |
>=5.0.100 | Hash de UseApphost usado para compilação (propriedade MSBuild) |
>=5,0.100 | OutputType com hash usado para compilação (propriedade MSBuild) |
>=5.0.201 | Hashed PublishReadyToRun usado para compilação (propriedade MSBuild) |
>=5.0.201 | Hashed PublishTrimmed usado para compilação (propriedade MSBuild) |
>=5.0.201 | Hashed PublishSingleFile usado para compilação (propriedade MSBuild) |
>=5.0.202 | Tempo decorrido desde o início do processo até a entrada no método principal do programa CLI, medindo a inicialização do host e do runtime. |
>=5.0.202 | Tempo decorrido para a etapa que adiciona ferramentas .NET ao caminho na primeira execução. |
>=5.0.202 | Tempo decorrido para exibir o aviso de uso pela primeira vez na primeira execução. |
>=5.0.202 | Tempo decorrido para gerar o certificado ASP.NET na primeira execução. |
>=5.0.202 | Tempo decorrido para analisar a entrada da CLI. |
>=6.0.100 | Arquitetura do sistema operacional |
>=6.0.104 | Hashed PublishReadyToRunUseCrossgen2 usado para compilação (propriedade MSBuild) |
>=6.0.104 | Versão Hashed Crossgen2Pack usada para compilação (propriedade MSBuild) |
>=6.0.104 | Hashed CompileListCount usado para compilação (propriedade MSBuild) |
>=6.0.104 | Hashed _ReadyToRunCompilationFailures usado para compilação (propriedade MSBuild) |
>=6.0.300 | Se a CLI foi invocada de um ambiente de Integração Contínua. Para obter mais informações, consulte Detecção de Integração Contínua . |
>=7.0.100 | Hashed PublishAot usado para compilação (propriedade MSBuild) |
>=7.0.100 | Hashed PublishProtocol usado para compilação (propriedade MSBuild) |
>=8.0.100 | TargetPlatformIdentifier com hash usado para compilação (propriedade MSBuild) |
>=8.0.100 | HybridGlobalization com hash usado para compilação (propriedade MSBuild) |
>=8.0.100 | Se o SDK do .NET Blazor WebAssembly é usado. |
>=8.0.100 | Se o SDK do .NET WebAssembly é usado. |
>=8.0.100 | Se o MAUI do .NET é usado. |
>=8.0.100 | Se o SDK móvel do .NET é usado. |
>=8.0.100 | Se outros SDKs móveis são usados (como: Avalonia, Uno). |
>=8.0.100 | Se o Mono AOT for usado. |
>=8.0.100 | Se o recurso IL da faixa de AOT Mono for usado. |
>=8.0.100 | Se o interpretador Mono é usado. |
>=8.0.100 | Se o modo de biblioteca para dispositivos móveis é usado. |
>=8.0.100 | Se NativeAOT é usado. |
>=8.0.100 | Versão do pacote de Mono usada. |
Opções coletadas
Determinados comandos enviam dados adicionais. 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 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 |
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.
Com exceção de --verbosity
e --sdk-package-version
, todos os outros valores são convertidos em hash a partir do SDK do .NET Core 2.1.100.
Telemetria do mecanismo de modelo
O comando de instanciação de modelo dotnet new
coleta dados adicionais para modelos criados pela Microsoft, começando com o SDK do .NET Core 2.1.100:
--framework
--auth
Telemetria de exceção de falha
Se a CLI/o SDK do .NET falhar, o nome da exceção e o rastreamento de pilha do código da CLI/do SDK serão coletados. Essas informações são coletadas para avaliar problemas e melhorar a qualidade do SDK e da CLI do .NET. Este artigo fornece informações sobre os dados que coletamos. Ele também fornece dicas sobre como os usuários que criam sua própria versão do SDK do .NET podem evitar a divulgação inadvertida de informações pessoais ou confidenciais.
A CLI do .NET coleta informações apenas para exceções de CLI/SDK, não exceções em seu aplicativo. Os dados coletados contêm o nome da exceção e o rastreamento de pilha. Esse rastreamento de pilha é do código da CLI/do 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)
Detecção contínua de integração
Para detectar se a CLI do .NET está em execução em um ambiente de Integração Contínua, a CLI do .NET investiga a presença e os valores de várias variáveis de ambiente conhecidas que os provedores de CI comuns definem.
A lista completa de variáveis de ambiente e o que é feito com seus valores é mostrada abaixo. Observe que, em todos os casos, o valor da variável de ambiente nunca é coletado, usado apenas para definir um sinalizador booliano.
Variável(s) | Provedor | Ação |
---|---|---|
TF_BUILD | Azure Pipelines | Analisar o valor booliano |
GITHUB_ACTIONS | Ações do GitHub | 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 |
IDENTIFICADOR_DA_CONSTRUÇÃO, IDENTIFICADOR_DO_PROJETO | Google Cloud Build | 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 |
Evitar a divulgação inadvertida de informações
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, os builds personalizados do SDK do .NET não devem estar localizados em diretórios cujos nomes de caminho expõem informações pessoais ou confidenciais.