Telemetría del SDK de .NET y la CLI de .NET

El SDK de .NET incluye una característica de telemetría que recopila datos de uso y los envía a Microsoft cuando se usan comandos de la CLI de .NET. Los datos de uso incluyen la información de excepción cuando se bloquea la CLI de .NET. La CLI de .NET se incluye en el SDK de .NET y es el conjunto de verbos que permiten compilar, probar y publicar las aplicaciones de .NET. Los datos de telemetría ayudan al equipo de .NET a que entienda cómo se usan las herramientas con el fin de mejorarlas. Con la información sobre los errores, el equipo consigue resolver problemas y corregir errores.

Los datos recopilados se publican de forma agregada bajo la licencia de atribución de Creative Commons. Algunos de los datos recopilados se publican en Datos de telemetría de la CLI de .NET.

Ámbito

dotnet tiene dos funciones: ejecutar aplicaciones y ejecutar comandos de la CLI. La telemetría no se recopila cuando se usa dotnet para iniciar una aplicación con el siguiente formato:

  • dotnet [path-to-app].dll

La telemetría se recopila cuando se usa cualquiera de los comandos de la CLI de .NET, como:

  • dotnet build
  • dotnet pack
  • dotnet run

Cómo desactivar la característica

La característica de telemetría del SDK de .NET está habilitada de forma predeterminada para las distribuciones de Microsoft del SDK. Para desactivar la característica de telemetría, establezca la variable de entorno DOTNET_CLI_TELEMETRY_OPTOUT en 1 o true.

El instalador del SDK de .NET también envía una única entrada de telemetría cuando se produce una instalación correcta. Para no participar, establezca la variable de entorno DOTNET_CLI_TELEMETRY_OPTOUT antes de instalar el SDK de .NET.

Importante

Para no participar una vez iniciado el instalador, ciérrelo, establezca la variable de entorno y ejecute el instalador de nuevo con ese valor establecido.

Divulgación

El SDK de .NET muestra texto similar al siguiente cuando se ejecuta por primera vez uno de los comandos de la CLI de .NET (por ejemplo, dotnet build). El texto puede variar ligeramente según la versión del SDK que ejecute. Esta experiencia de "primera vista" es la forma en que Microsoft le notifica sobre la recopilación de datos.

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 deshabilitar este mensaje y el de bienvenida de .NET, establezca la variable de entorno DOTNET_NOLOGO en true. Tenga en cuenta que esta variable no tiene ningún efecto sobre la exclusión de la telemetría.

Puntos de datos

La característica de telemetría no recopila datos personales, como direcciones de correo electrónico o nombres de usuario. No examina el código ni extrae datos de nivel de proyecto, como el nombre, el repositorio o el autor. No extrae el contenido de los archivos de datos a los que acceden o crean sus aplicaciones, ni los volcados de la memoria ocupada por los objetos de las aplicaciones, ni el contenido del portapapeles. Los datos se envían de forma segura a los servidores de Microsoft con tecnología de Azure Monitor, se conservan bajo acceso restringido y se publican bajo controles de seguridad estrictos de sistemas seguros de Azure Storage.

La protección de su privacidad es importante para nosotros. Si sospecha que la telemetría está recopilando datos confidenciales o que los datos se están tratando de forma no segura o inapropiada, informe de un problema en el repositorio de dotnet/cli o envíenos un correo electrónico a dotnet@microsoft.com para que lo investiguemos.

La característica de telemetría recopila los siguientes datos:

Versiones del SDK Datos
Todas Marca de tiempo de la invocación.
Todas Comando invocado (por ejemplo, "build"), con hash a partir de 2.1.
Todas Dirección IP de tres octetos usada para determinar la ubicación geográfica.
Todas Sistema operativo y versión.
Todas Identificador de tiempo de ejecución (RID) en el que se ejecuta el SDK.
Todas Versión del SDK de .NET.
Todas Perfil de telemetría: valor opcional usado internamente en Microsoft y que solo se usa con la participación explícita del usuario.
>=2.0 Opciones y argumentos del comando: se recopilan varias opciones y argumentos (no cadenas arbitrarias). Vea opciones recopiladas. Con hash a partir de la versión 2.1.300.
>=2.0 Si el SDK se ejecuta en un contenedor.
>=2.0 Plataformas de destino (desde el evento TargetFramework), con hash a partir de 2.1.
>=2.0 Dirección de Media Access Control (MAC) con hash (SHA256).
>=2.0 Directorio de trabajo actual con hash.
>=2.0 Informe de instalación correcta, con el nombre de archivo exe del instalador con hash.
>=2.1.300 Versión de kernel.
>=2.1.300 Versión/versión de libc.
>=3.0.100 Indica si la salida se redirigió (true o false).
>=3.0.100 En un bloqueo de CLI/SDK, el tipo de excepción y su seguimiento de pila (solo el código de CLI/SDK se incluye en el seguimiento de la pila enviado). Para más información, consulte Telemetría de las excepciones de bloqueo.
>=5.0.100 TargetFrameworkVersion con hash usado para la compilación (propiedad de MSBuild)
>=5.0.100 RuntimeIdentifier con hash usado para la compilación (propiedad de MSBuild)
>=5.0.100 SelfContained con hash usado para la compilación (propiedad de MSBuild)
>=5.0.100 UseApphost con hash usado para la compilación (propiedad de MSBuild)
>=5.0.100 OutputType con hash usado para la compilación (propiedad de MSBuild)
>=5.0.201 PublishReadyToRun con hash usado para la compilación (propiedad de MSBuild)
>=5.0.201 PublishTrimmed con hash usado para la compilación (propiedad de MSBuild)
>=5.0.201 PublishSingleFile con hash usado para la compilación (propiedad de MSBuild)
>=5.0.202 Tiempo transcurrido desde el inicio del proceso hasta que se escribe el método principal del programa de la CLI, midiendo el inicio del host y del entorno de ejecución.
>=5.0.202 Tiempo transcurrido para el paso que agrega herramientas de .NET a la ruta de acceso en la primera ejecución.
>=5.0.202 Tiempo transcurrido para mostrar el aviso de uso por primera vez en la primera ejecución.
>=5.0.202 Tiempo transcurrido para generar el certificado ASP.NET en la primera ejecución.
>=5.0.202 Tiempo transcurrido para analizar la entrada de la CLI.
>=6.0.100 Arquitectura del SO
>=6.0.104 PublishReadyToRunUseCrossgen2 con hash usado para la compilación (propiedad de MSBuild)
>=6.0.104 Crossgen2PackVersion con hash usado para la compilación (propiedad de MSBuild)
>=6.0.104 CompileListCount con hash usado para la compilación (propiedad de MSBuild)
>=6.0.104 _ReadyToRunCompilationFailures con hash usado para la compilación (propiedad de MSBuild)
>=6.0.300 Si se invocó la CLI desde un entorno de integración continua. Para más información, consulte Detección de integración continua.
>=7.0.100 PublishAot con hash usado para la compilación (propiedad de MSBuild)
>=7.0.100 PublishProtocol con hash usado para la compilación (propiedad de MSBuild)

Opciones recopiladas

Determinados comandos envían datos adicionales. Un subconjunto de comandos envía el primer argumento:

Comando Datos del primer argumento enviados
dotnet help <arg> Se está consultando la ayuda del comando.
dotnet new <arg> Nombre de la plantilla (con hash).
dotnet add <arg> La palabra package o reference.
dotnet remove <arg> La palabra package o reference.
dotnet list <arg> La palabra package o reference.
dotnet sln <arg> La palabra add, list o remove.
dotnet nuget <arg> La palabra delete, locals o push.
dotnet workload <subcommand> <arg> La palabra install, update, list, search, uninstall, repair o restore y el nombre de la carga de trabajo (con hash).
dotnet tool <subcommand> <arg> La palabra install, update, list, search, uninstall o run y el nombre de la herramienta dotnet (con hash).

Un subconjunto de comandos envía las opciones seleccionadas, si se usan, junto con sus valores:

Opción Comandos
--verbosity Todos los 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

A excepción de --verbosity y --sdk-package-version, se aplica un algoritmo hash a los demás valores a partir del SDK de .NET Core 2.1.100.

Telemetría del motor de plantilla

El comando de creación de instancias de la plantilla dotnet new recopila datos adicionales para plantillas creadas por Microsoft, a partir del SDK de .NET Core 2.1.100:

  • --framework
  • --auth

Telemetría de las excepciones de bloqueo

Si se bloquea el SDK o la CLI de .NET, se recopilan el nombre de la excepción y el seguimiento de la pila del código de la CLI o el SDK. Esta información se recopila para evaluar los problemas y mejorar la calidad del SDK y la CLI de .NET. En este artículo se proporciona información sobre los datos que se recopilan. También se ofrecen sugerencias para que los usuarios que compilan una versión propia del SDK de .NET eviten la divulgación involuntaria de información personal o confidencial.

La CLI de .NET solo recopila información de las excepciones de la CLI o del SDK, no de las excepciones de la aplicación. Los datos recopilados contienen el nombre de la excepción y el seguimiento de la pila. Este seguimiento de la pila es del código de CLI/SDK.

En este ejemplo se muestra el tipo de datos que se recopilan:

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)

Detección de integración continua

Para detectar si la CLI de .NET se ejecuta en un entorno de integración continua, la CLI de .NET sondea la presencia y los valores de varias variables de entorno conocidas, establecidas por los proveedores de CI comunes.

A continuación se muestra la lista completa de variables de entorno y lo que se hace con sus valores. Tenga en cuenta que, en todos los casos, el valor de la variable de entorno nunca se recopila, solo se usa para establecer una marca booleana.

Variable/s Proveedor Acción
TF_BUILD Azure Pipelines Análisis del valor booleano
GITHUB_ACTIONS Acciones de GitHub Análisis del valor booleano
APPVEYOR Appveyor Análisis del valor booleano
CI Muchos o la mayoría Análisis del valor booleano
TRAVIS Travis CI Análisis del valor booleano
CIRCLECI CircleCI Análisis del valor booleano
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services CodeBuild Comprobar si están todos presentes y no son null
BUILD_ID, BUILD_URL Jenkins Comprobar si están todos presentes y no son null
BUILD_ID, PROJECT_ID Google Cloud Build Comprobar si están todos presentes y no son null
TEAMCITY_VERSION TeamCity Comprobar si está presente y no es null
JB_SPACE_API_URL JetBrains Space Comprobar si está presente y no es null

Evasión de la divulgación involuntaria de información

Los colaboradores de .NET y cualquier otro usuario que ejecute una versión del SDK de .NET compilada por ellos mismos deben tener en cuenta la ruta de acceso al código fuente del SDK. Si se produce un bloqueo mientras se usa un SDK de .NET que es una compilación de depuración personalizada o está configurado con archivos de símbolos de compilación personalizados, la ruta de acceso del archivo de origen del SDK desde el equipo de compilación se recopila como parte del seguimiento de la pila y no tiene un algoritmo hash.

Por este motivo, las compilaciones personalizadas del SDK de .NET no se deben almacenar en directorios cuyos nombres de ruta de acceso expongan información personal o confidencial.

Vea también