Compartir por


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

El SDK de .NET incluye una característica de telemetría que recopila datos de uso y la envía a Microsoft cuando se usan comandos de 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 incluye 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 comprender cómo se usan las herramientas para que se puedan mejorar. La información sobre errores ayuda al equipo a resolver problemas y a corregir errores.

Los datos recopilados se publican en 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.

Alcance

dotnet tiene dos funciones: para ejecutar aplicaciones y para 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 darse de baja

La característica de telemetría del SDK de .NET está habilitada de forma predeterminada para las distribuciones de Microsoft del SDK. Para no participar en 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 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 después de iniciar el instalador: cierre el instalador, establezca la variable de entorno y vuelva a ejecutar el instalador con ese valor establecido.

Revelación

El SDK de .NET muestra texto similar al siguiente resultado cuando se ejecuta por primera vez uno de los comandos de la CLI de .NET (por ejemplo, dotnet build). El texto puede variar ligeramente en función de la versión del SDK que esté ejecutando. Esta experiencia de "primera ejecución" 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 mensaje de bienvenida de .NET, establezca la variable de entorno DOTNET_NOLOGO en true. Esta variable no tiene ningún efecto en la exclusión voluntaria de la telemetría.

Nota:

Cambio importante: El comportamiento de los mensajes de telemetría escritos en stderr ha cambiado en las versiones recientes del SDK de .NET. Para más información, consulte comandos de la CLI de dotnet que registran datos no relevantes para comandos en stderr.

Puntos de datos

La característica de telemetría no recopila datos personales, como nombres de usuario o direcciones de correo electrónico. No examina el código y no 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 mediante la tecnología de Azure Monitor . Los datos se mantienen bajo acceso restringido y se publican bajo estrictos controles de seguridad de sistemas seguros de Azure Storage .

Proteger su privacidad es importante para Microsoft. Si sospecha que la telemetría recopila datos confidenciales o los datos se están administrando de forma no segura o inapropiada, abra un problema en el repositorio dotnet/sdk .

Para obtener más información sobre la privacidad y los datos personales recopilados, consulte la Declaración de privacidad de Microsoft.

En las pestañas siguientes se muestran los datos de telemetría capturados por la versión del SDK:

  • SDK versión 10.0.100 y posteriores:
    • Identificador de proyecto con hash para dotnet run.
    • Tipo de aplicación basada en archivos o en proyectos para dotnet run.
    • El nombre del perfil de inicio, si está especificado para dotnet run.
    • Si se especificó un perfil de inicio para dotnet run.
    • Modelo de configuración de inicio usado (si existe) para dotnet run.
    • Número de SDK usados para dotnet run.
    • Número de PackageReferences para dotnet run.
    • Número de ProjectReferences para dotnet run.
    • Número de propiedades adicionales para aplicaciones basadas en archivos con dotnet run.
    • Si MSBuild se usó para aplicaciones basadas en archivos con dotnet run.
    • Indica si el compilador de Roslyn se usó para aplicaciones basadas en archivos con dotnet run.
    • El nombre del agente LLM detectado si se invocó la CLI desde un agente LLM. Para más información, consulte Detección de LLM.
    • Captura el global.json estado en el momento en que se invoca un comando. El estado es uno de los siguientes valores: not_found, válido, invalid_json o invalid_data.
    • Qué generadores de tareas de MSBuild se usan para cargar y ejecutar tareas (incluidas las tareas en línea de C#, las tareas compatibles con varios subprocesos y las tareas fuera del proceso) y cuántas tareas ejecutan.
    • Número de tareas de MSBuild ejecutadas en TaskHosts frente a tareas no ejecutadas en TaskHosts.

Opciones recopiladas

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

Get-Help Primeros datos de 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 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

Cuando el SDK no puede resolver un comando integrado, cualquier solucionador de comandos que resuelva correctamente el comando envía un hash del nombre del comando junto con el nombre del tipo de solucionador de comandos.

A partir del SDK de .NET Core 2.1.100, el SDK aplica un hash a todos estos valores, excepto para --verbosity y --sdk-package-version.

Telemetría del motor de plantilla

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

  • --framework
  • --auth

dotnet run telemetry

A partir del SDK de .NET 10.0.100, el dotnet run comando recopila telemetría basada en características para ayudar a impulsar el desarrollo y el uso de aplicaciones basadas en archivos.

Telemetría para todas las dotnet run ejecuciones:

  • Tipo de aplicación (basado en archivos o basado en proyectos)
  • Identificador hash de archivo o proyecto
  • Número de SDK usados
  • Número de referencias de paquetes
  • Número de ProjectReferences
  • Uso del perfil de inicio (ya sea que se haya utilizado --launch-profile o --no-launch-profile)
  • Si el perfil de inicio es un perfil predeterminado
  • Modelo de configuración de inicio aplicado, si existe

Telemetría solo para aplicaciones basadas en archivos:

  • Número de propiedades adicionales (por ejemplo, #:property directivas)
  • Si se usó MSBuild para compilar
  • Si el compilador de Roslyn se usó directamente

Telemetría de las excepciones de bloqueo

Si la CLI de .NET o el SDK se bloquea, se recopilan el nombre de la excepción y la traza de pila del código de la CLI o del SDK. La CLI de .NET recopila esta información para evaluar problemas y mejorar la calidad del SDK y la CLI de .NET.

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

En el ejemplo siguiente 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)

Los colaboradores de .NET y cualquier otra persona que ejecute una versión del SDK de .NET que hayan compilado ellos mismos deben considerar la ruta de acceso a su 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, no debe colocar compilaciones personalizadas del SDK de .NET en directorios cuyos nombres de ruta de acceso expongan información personal o confidencial.

Detección continua de integración

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

En la lista siguiente se muestran las variables de entorno y cómo usa la CLI de .NET sus valores. La CLI de .NET no recopila el valor de ninguna variable de entorno; solo usa el valor para establecer una marca booleana.

Variable/s Proveedor Acción
TF_BUILD Azure Pipelines (Canales de Azure) 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, un servicio de construcción de código 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 Comprobación de si está presente y no es NULL
JB_SPACE_API_URL Espacio JetBrains Comprobación de si está presente y no es NULL

Detección de LLM

Para detectar si la CLI de .NET se ejecuta en el contexto de un agente de LLM, la CLI de .NET comprueba la presencia y los valores de varias variables de entorno que establecen los agentes llM y los asistentes de codificación de IA.

En la tabla siguiente se muestra el nombre del agente, la variable de entorno utilizada para la detección y el valor del tipo de agente notificado. Los valores reales de estas variables de entorno no se recopilan; solo se usan para identificar el tipo de agente.

Agente LLM Variable Importancia
GitHub Copilot GITHUB_COPILOT_CLI_MODE copiloto
Claude Code CLAUDECODE claude
Cursor CURSOR_EDITOR cursor
Google Gemini GEMINI_CLI "géminis"

Si la CLI de .NET detecta varios agentes, concatena los distintos valores del agente con una coma para generar el valor final.

Consulte también