SDK .NET et télémétrie CLI .NET

Le Kit de développement logiciel (SDK) .NET inclut une fonctionnalité de télémétrie qui collecte les données d’utilisation et les envoie à Microsoft lorsque vous utilisez des commandes CLI .NET. Les données d’utilisation incluent les informations d’exception lorsque l’interface CLI .NET se bloque. L’interface CLI .NET est fournie avec le Kit de développement logiciel (SDK) .NET. Il s’agit de l’ensemble de verbes qui vous permettent de générer, tester et publier vos applications .NET. Les données de télémétrie aident l’équipe .NET à comprendre comment les outils sont utilisés afin qu’ils puissent être améliorés. Les informations sur les échecs aident l’équipe à résoudre les problèmes et à corriger les bogues.

Les données collectées sont publiées dans en groupe sous la Licence d’attribution Creative Commons. Certaines des données collectées sont publiées sur les données de télémétrie de l’interface CLI .NET.

Étendue

dotnet a deux fonctions : exécuter les applications et exécuter les commandes CLI. Les informations de télémétrie ne sont pas collectées quand vous utilisez dotnet pour démarrer une application au format suivant :

  • dotnet [path-to-app].dll

La télémétrie est collectée lors de l’utilisation de l’une des commandes CLI .NET, telles que :

  • dotnet build
  • dotnet pack
  • dotnet run

Comment désactiver la fonctionnalité

La fonctionnalité de télémétrie du kit SDK .NET est activée par défaut pour les distributions Microsoft du kit SDK. Pour désactiver la fonctionnalité de télémétrie, définissez la variable d’environnement DOTNET_CLI_TELEMETRY_OPTOUT sur 1 ou true.

Une entrée de télémétrie est également envoyée par le programme d’installation du Kit de développement logiciel (SDK) .NET lorsqu’une installation réussie se produit. Pour refuser, définissez la variable d’environnement DOTNET_CLI_TELEMETRY_OPTOUT avant d’installer le Kit de développement logiciel (SDK) .NET.

Important

Pour désactiver après avoir démarré le programme d’installation, fermez le programme d’installation, définissez la variable d’environnement, puis réexécutez le programme d’installation avec cette valeur définie.

Divulgation d’informations

Le Kit de développement logiciel (SDK) .NET affiche du texte similaire à ce qui suit lors de la première exécution de l’une des commandes CLI .NET (par exemple dotnet build). Le texte peut varier légèrement selon la version du SDK que vous exécutez. Lors de cette première exécution, Microsoft vous informe sur la collecte de données.

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

Pour désactiver ce message et le message d’accueil .NET, définissez la variable d’environnement DOTNET_NOLOGO sur true. Notez que cette variable n’a aucun effet sur la désactivation de la télémétrie.

Points de données

La fonctionnalité de télémétrie ne collecte pas de données personnelles, comme les noms d’utilisateurs et les adresses e-mail. Elle n’analyse pas votre code et n’extrait pas de données au niveau du projet, comme le nom, le référentiel ou l’auteur. Elle n’extrait pas le contenu des fichiers de données consultés ou créés par vos applications, les images mémoire de la mémoire occupée par les objets de vos applications ni le contenu du Presse-papiers. Les données sont envoyées de manière sécurisée à des serveurs Microsoft à l’aide de la technologie Azure Monitor, stockées à un emplacement dont l’accès est strictement limité et publiées conformément à des contrôles de sécurité stricts à partir de systèmes Stockage Azure sécurisés.

Nous prenons la protection de vos données au sérieux. Si vous soupçonnez que les données de télémétrie collectent des données sensibles ou que les données sont gérées de manière non sécurisée ou inappropriée, déposez un rapport dans le référentiel dotnet/sdk ou envoyez un e-mail à dotnet@microsoft.com à des fins d’investigation.

La fonctionnalité de télémétrie collecte les données suivantes :

Versions du SDK Données
Tous Horodatage de l’appel.
Tous Commande appelée (par exemple, « build »), hachée à partir de la version 2.1.
Tous Adresse IP de trois octets utilisée pour déterminer l’emplacement géographique.
Tous Système d’exploitation et version.
Tous ID du runtime (RID) sur lequel le kit SDK s’exécute.
Tous Version du Kit de développement logiciel (SDK) .NET.
Tous Profil de télémétrie : valeur facultative utilisée uniquement avec l’adhésion explicite de l’utilisateur et employée en interne par Microsoft.
>=2.0 Arguments et options de commande : plusieurs arguments et options sont collectés (pas de chaînes arbitraires). Consultez options collectées. Hachage après la version 2.1.300.
>=2.0 Si le SDK est en cours d’exécution dans un conteneur.
>=2.0 Frameworks cibles (tirés de l’événement TargetFramework), hachés à partir de la version 2.1.
>=2.0 Adresse MAC (Hashed Media Access Control) (SHA256).
>=2.0 Répertoire de travail actuel haché.
>=2.0 Rapport d’installation réussie, avec hachage du nom de fichier .exe du programme d’installation.
>=2.1.300 Version du noyau.
>=2.1.300 Version de Libc.
>=3.0.100 Indique si la sortie a été redirigée (true ou false).
>=3.0.100 En cas de plantage CLI/SDK, type d’exception et rapport des appels de procédures (seul le code CLI/SDK est inclus dans le rapport des appels de procédure envoyé). Pour plus d’informations, consultez Télémétrie des exceptions d’incident.
>=5.0.100 Hachage targetFrameworkVersion utilisé pour le build (propriété MSBuild)
>=5.0.100 Hachage RuntimeIdentifier utilisé pour le build (propriété MSBuild)
>=5.0.100 Hachage SelfContained utilisé pour le build (propriété MSBuild)
>=5.0.100 Hachage UseApphost utilisé pour le build (propriété MSBuild)
>=5.0.100 Hachage OutputType utilisé pour le build (propriété MSBuild)
>=5.0.201 Hachage PublishReadyToRun utilisé pour le build (propriété MSBuild)
>=5.0.201 Hachage PublishTrimmed utilisé pour le build (propriété MSBuild)
>=5.0.201 Hachage PublishSingleFile utilisé pour le build (propriété MSBuild)
>=5.0.202 Temps écoulé entre le début du processus et l’entrée de la méthode principale du programme CLI, mesure de l’hôte et du démarrage de l’exécution.
>=5.0.202 Temps écoulé pour l’étape qui ajoute .NET Tools au chemin d’accès lors de la première exécution.
>=5.0.202 Temps écoulé pour afficher pour la première fois l’avis d’utilisation lors de la première exécution.
>=5.0.202 Temps écoulé pour générer le certificat ASP.NET lors de la première exécution.
>=5.0.202 Temps écoulé pour analyser l’entrée CLI.
>=6.0.100 Architecture du système d’exploitation
>=6.0.104 Hachage PublishReadyToRunUseCrossgen2 utilisé pour le build (propriété MSBuild)
>=6.0.104 Hachage Crossgen2PackVersion utilisé pour le build (propriété MSBuild)
>=6.0.104 Hachage CompileListCount utilisé pour le build (propriété MSBuild)
>=6.0.104 Hachage _ReadyToRunCompilationFailures utilisé pour le build (propriété MSBuild)
>=6.0.300 Si l’interface CLI a été appelée à partir d’un environnement d’intégration continue. Pour plus d’informations, consultez Détection d’intégration continue.
>=7.0.100 Hachage PublishAot utilisé pour le build (propriété MSBuild)
>=7.0.100 Hachage PublishProtocol utilisé pour le build (propriété MSBuild)

Options collectées

Certaines commandes envoient des données supplémentaires. Un sous-ensemble de commandes envoie le premier argument :

Commande Données du premier argument envoyées
dotnet help <arg> La commande help fait l’objet d’une requête.
dotnet new <arg> Nom du modèle (haché).
dotnet add <arg> Mot package ou reference.
dotnet remove <arg> Mot package ou reference.
dotnet list <arg> Mot package ou reference.
dotnet sln <arg> Mot add, list ou remove.
dotnet nuget <arg> Mot delete, locals ou push.
dotnet workload <subcommand> <arg> Le mot install, update, list, search, uninstall, repair, restore et le nom de la charge de travail (hachage).
dotnet tool <subcommand> <arg> Le mot install, update, list, search, uninstall, run et le nom de l’outil dotnet (hachage).

Un sous-ensemble de commandes envoie les options sélectionnées si elles sont utilisées, ainsi que leurs valeurs :

Option Commandes
--verbosity Toutes les commandes
--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

À l’exception de --verbosity et --sdk-package-version, toutes les autres valeurs sont hachées à partir du SDK .NET Core 2.1.100.

Télémétrie du moteur de modèle

La commande d’instanciation de modèle dotnet new collecte des données supplémentaires pour les modèles créés par Microsoft, à partir du Kit de développement logiciel (SDK) .NET Core 2.1.100 :

  • --framework
  • --auth

Télémétrie des exceptions d’incident

Si un incident se produit sur l’interface CLI/SDK .NET, elle collecte le nom de l’exception et de la trace de pile du code CLI/SDK. Ces informations sont collectées pour évaluer les problèmes et améliorer la qualité du Kit de développement logiciel (SDK) .NET et de l’interface CLI. Cet article fournit des informations sur les données que nous collectons. Cela fournit également des conseils sur la façon dont les utilisateurs qui créent leur propre version du Kit de développement logiciel (SDK) .NET peuvent éviter la divulgation accidentelle d’informations personnelles ou sensibles.

L’interface CLI .NET collecte des informations pour les exceptions CLI/SDK uniquement, et non pour les exceptions de votre application. Les données collectées contiennent le nom de l’exception et le rapport des appels de procédure. Ce rapport porte sur le code CLI/SDK.

L’exemple suivant montre le type des données collectées :

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)

Détection d’intégration continue

Pour détecter si l’interface CLI .NET s’exécute dans un environnement d’intégration continue, l’interface CLI .NET sonde la présence et les valeurs de plusieurs variables d’environnement connues définies par les fournisseurs CI courants.

La liste complète des variables d’environnement, et ce qui est fait avec leurs valeurs, est illustrée ci-dessous. Notez que dans tous les cas, la valeur de la variable d’environnement n’est jamais collectée, et n’est utilisée que pour définir un indicateur booléen.

Variable(s) Fournisseur Action
TF_BUILD Azure Pipelines Analyser la valeur booléenne
GITHUB_ACTIONS GitHub Actions Analyser la valeur booléenne
APPVEYOR Appveyor Analyser la valeur booléenne
CI Many/Most Analyser la valeur booléenne
TRAVIS Travis CI Analyser la valeur booléenne
CIRCLECI CircleCI Analyser la valeur booléenne
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services CodeBuild Vérifier si tous sont présents et non null
BUILD_ID, BUILD_URL Jenkins Vérifier si tous sont présents et non null
BUILD_ID, PROJECT_ID Google Cloud Build Vérifier si tous sont présents et non null
TEAMCITY_VERSION TeamCity Vérifier si présent et non null
JB_SPACE_API_URL JetBrains Space Vérifier si présent et non null

Éviter la divulgation accidentelle d’informations

Les contributeurs .NET et toute autre personne exécutant une version du Kit de développement logiciel (SDK) .NET qu’ils ont créé eux-mêmes doivent prendre en compte le chemin d’accès à leur code source du SDK. Si un incident se produit lors de l’utilisation d’un SDK .NET qui est un build de débogage personnalisé ou configuré avec des fichiers de symboles de build personnalisés, le chemin du fichier source du SDK à partir de la machine de build est collecté dans le cadre de la trace de pile et n’est pas haché.

Pour cette raison, les builds personnalisées du Kit de développement logiciel (SDK) .NET ne doivent pas se trouver dans des répertoires dont les noms de chemin d’accès exposent des informations personnelles ou sensibles.

Voir aussi