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 para a Microsoft quando você usa comandos da CLI do .NET. 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 melhoradas. Informações sobre falhas ajudam a equipe a resolver problemas e corrigir bugs.
Os dados recolhidos são publicados de forma agregada sob a Licença de Atribuição Creative Commons. Alguns dos dados coletados são publicados em Dados de Telemetria da CLI do .NET.
Âmbito
dotnet
tem duas funções: executar aplicativos e executar comandos da CLI. A telemetria não é coletada ao ser usada dotnet
para iniciar um aplicativo no seguinte formato:
dotnet [path-to-app].dll
A telemetria é coletada ao usar qualquer um dos comandos da CLI do .NET, como:
dotnet build
dotnet pack
dotnet run
Como optar por não participar
O recurso de telemetria do SDK do .NET é habilitado por padrão para distribuições Microsoft do SDK. Para desativar o recurso de telemetria, defina a DOTNET_CLI_TELEMETRY_OPTOUT
variável de ambiente 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 desativar, defina a DOTNET_CLI_TELEMETRY_OPTOUT
variável de ambiente antes de instalar o SDK do .NET.
Importante
Para desativar depois de iniciar o instalador: feche o instalador, defina a variável de ambiente e, em seguida, execute o instalador novamente com esse valor definido.
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 um pouco, 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 desativar essa mensagem e a mensagem de boas-vindas do .NET, defina a variável de DOTNET_NOLOGO
ambiente como true
. Observe que essa variável não tem efeito sobre a opção de exclusão da telemetria.
Pontos de dados
O recurso de telemetria não coleta dados pessoais, como nomes de usuário ou endereços de e-mail. 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 pelos objetos de seus aplicativos ou o conteúdo da área de transferência. Os dados são enviados com segurança para servidores Microsoft usando a tecnologia Azure Monitor, mantidos sob acesso restrito e publicados sob controles de segurança rigorosos de sistemas de Armazenamento do Azure seguros.
Proteger a sua privacidade é importante para nós. Se você suspeitar que a telemetria está coletando dados confidenciais ou que os dados estão sendo tratados de forma insegura ou inadequada, registre um problema no repositório dotnet/sdk ou envie um e-mail para investigação dotnet@microsoft.com .
O recurso de telemetria coleta os seguintes dados:
Versões do SDK | Dados |
---|---|
Todos | Carimbo de data/hora da invocação. |
Todos | Comando invocado (por exemplo, "build"), com hash a partir de 2.1. |
Todos | Três endereços IP de octeto usados para determinar a localização geográfica. |
Todos | Sistema operacional e versão. |
Todos | ID de tempo de execução (RID) em que o SDK está sendo executado. |
Todos | Versão do SDK do .NET. |
Todos | Perfil de telemetria: um valor opcional usado apenas com 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). Veja as opções coletadas. Hashed após 2.1.300. |
>=2,0 | Se o SDK está sendo executado em um contêiner. |
>=2,0 | Estruturas de destino (do evento), com hash a TargetFramework partir da versão 2.1. |
>=2,0 | Endereço MAC (Hashed Media Access Control) (SHA256). |
>=2,0 | Diretório de trabalho atual hashed. |
>=2,0 | Instale o relatório de sucesso, com o nome do arquivo exe do instalador com hash. |
>=2.1.300 | Versão do kernel. |
>=2.1.300 | Lançamento/versão do Libc. |
>=3.0.100 | Se a saída foi redirecionada (true ou false). |
>=3.0.100 | Em uma falha de CLI/SDK, o tipo de exceção e seu rastreamento de pilha (somente o código CLI/SDK é incluído no rastreamento de pilha enviado). Para obter mais informações, consulte Telemetria de exceção de falha. |
>=5.0.100 | Hashed TargetFrameworkVersion usado para compilação (propriedade 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 | Hashed UseApphost usado para compilação (propriedade MSBuild) |
>=5.0.100 | Hashed OutputType usado para compilação (propriedade MSBuild) |
>=5.0.201 | Hashed PublishReadyToRun usado para compilação (propriedade MSBuild) |
>=5.0.201 | Hashed PublishTrimmed usado para construçã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é entrar no método principal do programa CLI, medindo a inicialização do host e do tempo de execução. |
>=5.0.202 | Tempo decorrido para a etapa que adiciona o .NET Tools 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 ASP.NET Certificado na primeira execução. |
>=5.0.202 | Tempo decorrido para analisar a entrada da CLI. |
>=6.0.100 | Arquitetura de SO |
>=6.0.104 | Hashed PublishReadyToRunUseCrossgen2 usado para compilação (propriedade MSBuild) |
>=6.0.104 | Hashed Crossgen2PackVersion usado para compilação (propriedade MSBuild) |
>=6.0.104 | Hashed CompileListCount usado para compilação (propriedade MSBuild) |
>=6.0.104 | Hashed _ReadyToRunCompilationFailures usado para construção (propriedade MSBuild) |
>=6.0.300 | Se a CLI foi invocada a partir de um ambiente de Integração Contínua. Para obter mais informações, consulte Deteção de integração contínua. |
>=7.0.100 | Hashed PublishAot usado para construção (propriedade MSBuild) |
>=7.0.100 | Hashed PublishProtocol usado para compilação (propriedade MSBuild) |
>=8.0.100 | Hashed TargetPlatformIdentifier usado para compilação (propriedade MSBuild) |
>=8.0.100 | Hashed HybridGlobalization usado para compilação (propriedade MSBuild) |
>=8.0.100 | Se o .NET Blazor WebAssembly SDK é usado. |
>=8.0.100 | Se o .NET WebAssembly SDK é usado. |
>=8.0.100 | Se o .NET MAUI é usado. |
>=8.0.100 | Se o SDK móvel .NET é usado. |
>=8.0.100 | Se outros SDKs móveis são usados (como: Avalonia, Uno). |
>=8.0.100 | Se o Mono AOT é usado. |
>=8.0.100 | Se o recurso Mono AOT strip IL é usado. |
>=8.0.100 | Se o intérprete 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 tempo de execução Mono usada. |
Opções recolhidas
Alguns comandos enviam dados adicionais. Um subconjunto de comandos envia o primeiro argumento:
Comando | Dados do primeiro argumento enviados |
---|---|
dotnet help <arg> |
A ajuda do comando está sendo consultada. |
dotnet new <arg> |
O nome do modelo (em 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 , , search list , uninstall , , restore repair e o nome da carga de trabalho (em hash). |
dotnet tool <subcommand> <arg> |
A palavra install , update , list , search , uninstall run , e o nome da ferramenta dotnet (em hash). |
Um subconjunto de comandos envia as opções selecionadas se forem usadas, 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 |
Com exceção --verbosity
de e --sdk-package-version
, todos os outros valores são colocados em hash a partir do SDK do .NET Core 2.1.100.
Telemetria do mecanismo de modelo
O dotnet new
comando de instanciação de modelo 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 o .NET CLI/SDK falhar, ele coletará o nome da exceção e o rastreamento de pilha do código CLI/SDK. 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 recolhemos. 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 é de código CLI/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)
Deteção de integração contínua
Para detetar se a CLI do .NET está sendo executada 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 booleano.
Variável(es) | Provider | Ação |
---|---|---|
TF_BUILD | Pipelines do Azure | Analisar valor booleano |
GITHUB_ACTIONS | GitHub Actions | Analisar valor booleano |
FORNECEDOR | Fornecedor | Analisar valor booleano |
IC | Muitos/A maioria | Analisar valor booleano |
TRAVIS | Travis CI | Analisar valor booleano |
CIRCLECI | Círculo CI | Analisar valor booleano |
CODEBUILD_BUILD_ID, AWS_REGION | Amazon Web Services CodeBuild | Verifique se todos estão presentes e não são nulos |
BUILD_ID, BUILD_URL | Jenkins | Verifique se todos estão presentes e não são nulos |
BUILD_ID, PROJECT_ID | Compilação do Google Cloud | Verifique se todos estão presentes e não são nulos |
TEAMCITY_VERSION | Cidade Equipa | Verifique se está presente e não é nulo |
JB_SPACE_API_URL | Espaço JetBrains | Verifique 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 mesmos criaram devem considerar o caminho para o código-fonte do SDK. Se ocorrer uma falha ao usar um SDK do .NET que seja uma compilação de depuração personalizada ou configurada com arquivos de símbolo de compilação personalizados, o caminho do arquivo de origem do SDK da máquina de compilação será coletado como parte do rastreamento de pilha e não terá hash.
Por isso, compilações personalizadas do SDK do .NET não devem estar localizadas em diretórios cujos nomes de caminho expõem informações pessoais ou confidenciais.