Condividi tramite


Telemetria di .NET SDK e .NET CLI

Il .NET SDK include una funzionalità di telemetria che raccoglie i dati di utilizzo e li invia a Microsoft quando vengono usati i comandi .NET CLI . I dati di utilizzo includono informazioni sulle eccezioni quando la CLI di .NET va in crash. L'interfaccia della riga di comando di .NET include .NET SDK ed è il set di verbi che consentono di compilare, testare e pubblicare le app .NET. I dati di telemetria consentono al team .NET di comprendere come vengono usati gli strumenti in modo che possano essere migliorati. Le informazioni sugli errori consentono al team di risolvere i problemi e correggere i bug.

I dati raccolti vengono pubblicati in modo aggregato nella Creative Commons Attribution License. Alcuni dei dati raccolti vengono pubblicati su .NET CLI dati di telemetria.

Ambito

dotnet ha due funzioni: per eseguire le app e per eseguire i comandi dell'interfaccia della riga di comando. La telemetria non viene raccolta quando si utilizza dotnet per avviare un'applicazione nel formato seguente:

  • dotnet [path-to-app].dll

La telemetria viene raccolta quando si utilizza uno dei comandi della CLI di .NET , ad esempio:

  • dotnet build
  • dotnet pack
  • dotnet run

Come rifiutare esplicitamente

La funzionalità di telemetria di .NET SDK è abilitata per impostazione predefinita per le distribuzioni Microsoft dell'SDK. Per rifiutare esplicitamente la funzionalità di telemetria, impostare la variabile di ambiente DOTNET_CLI_TELEMETRY_OPTOUT su 1 o true.

Quando si verifica un'installazione corretta, una singola voce di telemetria viene inviata anche dall'installer di .NET SDK. Per rifiutare esplicitamente, impostare la variabile di ambiente DOTNET_CLI_TELEMETRY_OPTOUT prima di installare .NET SDK.

Importante

Per annullare dopo l'avvio dell'installatore: chiudere l'installatore, impostare la variabile di ambiente, quindi eseguire nuovamente l'installatore con tale valore impostato.

Rivelazione

.NET SDK visualizza testo simile al seguente quando si esegue per la prima volta uno dei comandi della .NET CLI (ad esempio, dotnet build). Il testo può variare leggermente a seconda della versione dell'SDK in esecuzione. Questa esperienza di "prima esecuzione" è il modo in cui Microsoft invia una notifica sulla raccolta dei dati.

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

Per disabilitare questo messaggio e il messaggio di benvenuto .NET, impostare la variabile di ambiente DOTNET_NOLOGO su true. Nota che questa variabile non influisce sulla disattivazione dei dati di telemetria.

Punti dati

La funzionalità di telemetria non raccoglie dati personali, ad esempio nomi utente o indirizzi di posta elettronica. Non analizza il codice e non estrae dati a livello di progetto, ad esempio nome, repository o autore. Non estrae il contenuto di alcun file di dati a cui le tue app accedono o che creano, né esegue il dump di qualsiasi memoria occupata dagli oggetti delle tue app, né il contenuto degli appunti. I dati vengono inviati in modo sicuro ai server Microsoft usando tecnologia di monitoraggio di Azure, con accesso limitato e pubblicati con controlli di sicurezza rigorosi da sistemi di archiviazione di Azure sicuri.

La protezione della privacy è importante per noi. Se si sospetta che la telemetria stia raccogliendo dati sensibili o che i dati vengano gestiti in modo non sicuro o inappropriato, inviare un problema nel repository dotnet/sdk o inviare un messaggio di posta elettronica a dotnet@microsoft.com per l'analisi.

La funzionalità di telemetria raccoglie i dati seguenti:

Versioni dell'SDK Dati
Tutto Timestamp della chiamata.
Tutto Comando richiamato (ad esempio, "build"), con hash a partire dalla versione 2.1.
Tutto Indirizzo IP a tre ottetti usato per determinare la posizione geografica.
Tutto Sistema operativo e versione.
Tutto ID di runtime (RID) in cui è in esecuzione l'SDK.
Tutto Versione di .NET SDK.
Tutto Profilo di telemetria: valore facoltativo usato solo con esplicito consenso esplicito dell'utente e usato internamente in Microsoft.
>=2.0 Argomenti e opzioni dei comandi: vengono raccolti diversi argomenti e opzioni (non stringhe arbitrarie). Consulta opzioni raccolte. Hash eseguito dopo la versione 2.1.300.
>=2.0 Indica se l'SDK è in esecuzione in un contenitore.
>=2.0 Framework di destinazione (dall'evento TargetFramework), con hash a partire dalla versione 2.1.
>=2.0 Indirizzo MAC (Hashed Media Access Control) (SHA256).
>=2.0 Directory di lavoro corrente con hash.
>=2.0 Rapporto di installazione riuscita, con nome file exe dell'installer con hash.
>=2.1.300 Versione del kernel.
>=2.1.300 Rilascio/versione di libc.
>=3.0.100 Indica se l'output è stato reindirizzato (true o false).
>=3.0.100 In caso di arresto anomalo dell'interfaccia della riga di comando/SDK, viene indicato il tipo di eccezione e la relativa traccia dello stack (solo il codice dell'interfaccia della riga di comando/SDK è incluso nella traccia dello stack inviata). Per ulteriori dettagli, consultare la telemetria delle eccezioni di arresto anomalo.
>=5.0.100 Hashed TargetFrameworkVersion usato per la compilazione (proprietà MSBuild)
>=5.0.100 RuntimeIdentifier con hash usato per la compilazione (proprietà MSBuild)
>=5.0.100 Hashed SelfContained utilizzato per la compilazione (proprietà MSBuild)
>=5.0.100 Hash di UseApphost utilizzato per la compilazione (proprietà MSBuild)
>=5.0.100 Hashed OutputType usato per la compilazione (proprietà MSBuild)
>=5.0.201 Hashed PublishReadyToRun usato per la compilazione (proprietà MSBuild)
>=5.0.201 Hashed PublishTrimmed usato per la compilazione (proprietà MSBuild)
>=5.0.201 Hashed PublishSingleFile usato per la compilazione (proprietà MSBuild)
>=5.0.202 Tempo trascorso dall'avvio del processo fino all'accesso al metodo principale del programma CLI, che misura il tempo di avvio dell'host e del runtime.
>=5.0.202 Tempo trascorso per il passaggio che aggiunge gli strumenti .NET al percorso alla prima esecuzione.
>=5.0.202 Tempo trascorso per visualizzare l'avviso di primo utilizzo alla prima esecuzione.
>=5.0.202 Tempo trascorso per la generazione del certificato ASP.NET al primo avvio.
>=5.0.202 Tempo trascorso per analizzare l'input CLI.
>=6.0.100 Architettura del sistema operativo
>=6.0.104 Hashed PublishReadyToRunUseCrossgen2 usato per la compilazione (proprietà MSBuild)
>=6.0.104 Hashed Crossgen2PackVersion usato per la compilazione (proprietà MSBuild)
>=6.0.104 Hashed CompileListCount utilizzato per la compilazione (proprietà MSBuild)
>=6.0.104 Hash di _ReadyToRunCompilationFailures usato per la build (proprietà MSBuild)
>=6.0.300 Se l'interfaccia a riga di comando è stata richiamata da un ambiente di integrazione continua. Per altre informazioni, vedere rilevamento dell'integrazione continua.
>=7.0.100 Hash PublishAot usato per la compilazione (proprietà MSBuild)
>=7.0.100 Protocollo di pubblicazione hashed utilizzato per la compilazione (proprietà MSBuild)
>=8.0.100 TargetPlatformIdentifier con hash usato per la compilazione (proprietà MSBuild)
>=8.0.100 Hashed HybridGlobalization usato per la compilazione (proprietà MSBuild)
>=8.0.100 Indica se viene usato .NET Blazor WebAssembly SDK.
>=8.0.100 Indica se viene usato .NET WebAssembly SDK.
>=8.0.100 Indica se viene usato .NET MAUI.
>=8.0.100 Indica se viene usato .NET Mobile SDK.
>=8.0.100 Indica se vengono usati altri SDK per dispositivi mobili (ad esempio: Avalonia, Uno).
>=8.0.100 Indica se viene usato Mono AOT.
>=8.0.100 Indica se la funzionalità di stripping IL del Mono AOT viene utilizzata.
>=8.0.100 Indica se viene usato l'interprete Mono.
>=8.0.100 Indica se viene usata la modalità libreria per dispositivi mobili.
>=8.0.100 Indica se viene usato NativeAOT.
>=8.0.100 Usata la versione del pacchetto di runtime Mono.

Opzioni raccolte

Alcuni comandi inviano dati aggiuntivi. Un subset di comandi invia il primo argomento:

Comando Dati del primo argomento inviati
dotnet help <arg> Si sta effettuando una ricerca nella Guida del comando.
dotnet new <arg> Nome del modello (con hash).
dotnet add <arg> La parola package o reference.
dotnet remove <arg> La parola package o reference.
dotnet list <arg> La parola package o reference.
dotnet sln <arg> La parola add, listo remove.
dotnet nuget <arg> La parola delete, localso push.
dotnet workload <subcommand> <arg> La parola install, update, list, search, uninstall, repair, restore e il nome del carico di lavoro (con hash).
dotnet tool <subcommand> <arg> La parola install, update, list, search, uninstall, run e il nome dello strumento dotnet (con hash).

Se vengono usati, un subset di comandi invia opzioni selezionate, insieme ai relativi valori:

Opzione Comandi
--verbosity Tutti i comandi
--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 l'SDK non riesce a risolvere un comando predefinito, qualsiasi resolver di comandi che risolve correttamente il comando invia un hash del nome del comando insieme al nome del sistema di risoluzione dei comandi.

Ad eccezione di --verbosity e --sdk-package-version, tutti gli altri valori vengono hashati a partire da .NET Core 2.1.100 SDK.

Telemetria del motore di template

Il comando di creazione di istanze del modello dotnet new raccoglie dati aggiuntivi per i modelli creati da Microsoft, a partire da .NET Core 2.1.100 SDK:

  • --framework
  • --auth

Telemetria degli errori di arresto anomalo

Se la CLI/SDK di .NET si blocca, raccoglie il nome dell'eccezione e la traccia dello stack del codice della CLI/SDK. Queste informazioni vengono raccolte per valutare i problemi e migliorare la qualità di .NET SDK e dell'interfaccia della riga di comando. Questo articolo fornisce informazioni sui dati raccolti. Fornisce anche suggerimenti su come gli utenti che creano la propria versione di .NET SDK possono evitare la divulgazione accidentale di informazioni personali o riservate.

L'interfaccia della riga di comando .NET raccoglie informazioni solo per le eccezioni CLI/SDK, non per le eccezioni nella tua applicazione. I dati raccolti contengono il nome dell'eccezione e la traccia dello stack. Questa stack trace è di codice CLI/SDK.

L'esempio seguente illustra il tipo di dati raccolti:

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)

Rilevamento dell'integrazione continua

Per determinare se la .NET CLI è in esecuzione in un ambiente di integrazione continua, verifica la presenza e i valori di diverse variabili di ambiente note impostate dai fornitori CI comuni.

Di seguito è riportato l'elenco completo delle variabili di ambiente e le operazioni eseguite con i relativi valori. Si noti che in ogni caso, il valore della variabile di ambiente non viene mai raccolto, usato solo per impostare un flag booleano.

Variabili Fornitore Azione
TF_BUILD Azure Pipelines Analizzare un valore booleano
GITHUB_ACTIONS GitHub Actions Analizzare un valore booleano
APPVEYOR Appveyor Analizzare un valore booleano
CI Molti/più Analizzare un valore booleano
TRAVIS Travis CI Analizzare un valore booleano
CIRCLECI Circle CI Analizzare un valore booleano
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services CodeBuild Verifica se tutti sono presenti e non nulli
BUILD_ID, BUILD_URL Jenkins Controllare se tutti sono presenti e non Null
BUILD_ID, PROJECT_ID Google Cloud Build Controllare che tutti siano presenti e non nulli
TEAMCITY_VERSION TeamCity Controllare se presente e non Null
JB_SPACE_API_URL JetBrains Space Controllare se presente e non Null

Evitare la divulgazione accidentale di informazioni

I collaboratori .NET e chiunque altro esegua una versione di .NET SDK creata da soli deve considerare il percorso del codice sorgente dell'SDK. Se si verifica un arresto anomalo durante l'uso di un SDK .NET che è una compilazione di debug personalizzata o configurata con file di simboli di compilazione personalizzati, il percorso del file di origine DELL'SDK dal computer di compilazione viene raccolto come parte dell'analisi dello stack e non viene eseguito l'hashing.

Per questo motivo, le build personalizzate di .NET SDK non devono trovarsi nelle directory i cui nomi di percorso espongono informazioni personali o riservate.

Vedere anche