Condividi tramite


Telemetria dell'interfaccia della riga di comando .NET e dell’SDK .NET

L’SDK .NET include una funzionalità di telemetria che raccoglie i dati di utilizzo e li invia a Microsoft quando si usano i comandi dell'interfaccia della riga di comando .NET. I dati di utilizzo includono informazioni sulle eccezioni che si verificano quando l'interfaccia della riga di comando .NET si arresta in modo anomalo. L'interfaccia della riga di comando di .NET è inclusa in .NET SDK ed è il set di verbi che consentono di compilare, testare e pubblicare le app .NET. I dati di telemetria aiutano il team .NET a capire come vengono usati gli strumenti per consentire a Microsoft di migliorarne le funzionalità. Le informazioni sugli errori consentono al team di risolvere i problemi e correggere i bug.

I dati raccolti vengono pubblicati in modo aggregato in base alla licenza Creative Commons Attribution. Alcuni dei dati raccolti vengono pubblicati in Dati di telemetria dell'interfaccia della riga di comando .NET.

Ambito

dotnet ha due funzioni: eseguire le app ed eseguire i comandi dell'interfaccia della riga di comando. I dati di telemetria non vengono raccolti quando si usa dotnet per avviare un'applicazione nel formato seguente:

  • dotnet [path-to-app].dll

I dati di telemetria vengono raccolti quando si usano i comandi dell’interfaccia della riga di comando di .NET, ad esempio:

  • dotnet build
  • dotnet pack
  • dotnet run

Come rifiutare esplicitamente

La funzionalità di telemetria dell’SDK .NET è 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.

Una singola voce di telemetria viene inviata anche dal programma di installazione di .NET SDK in caso di installazione corretta. Per rifiutare esplicitamente, impostare la variabile di ambiente DOTNET_CLI_TELEMETRY_OPTOUT prima di installare .NET SDK.

Importante

Per rifiutare esplicitamente dopo l'avvio del programma di installazione: chiudere il programma di installazione, impostare la variabile di ambiente, quindi eseguire di nuovo il programma di installazione con tale valore impostato.

Divulgazione

La prima volta che si esegue uno dei comandi dell'interfaccia della riga di comando di .NET, ad esempio dotnet build, .NET SDK visualizza un testo simile al seguente. Testo può variare leggermente a seconda della versione del SDK è in esecuzione. Questa prima esperienza riguarda la modalità di notifica della raccolta dei dati da parte di Microsoft.

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. Si noti che questa variabile non ha alcun effetto sul rifiuto esplicito dei dati di telemetria.

Punti dati

La funzionalità di telemetria non raccoglie i dati personali, ad esempio nomi utente o indirizzi di posta elettronica. Non esegue l'analisi del codice e non estrae dati a livello di progetto, ad esempio nome, repository o autore. Non estrae il contenuto dei file di dati a cui accedono o creati dalle app, esegue il dump di qualsiasi memoria occupata dagli oggetti delle app o il contenuto degli Appunti. I dati vengono inviati ai server Microsoft in modo sicuro tramite la tecnologia Monitoraggio di Azure, conservati con accesso limitato e pubblicati in base a severi controlli di sicurezza da sistemi di archiviazione di Azure sicuri.

La tutela della privacy è importante per Microsoft. Se si ritiene che la telemetria raccolga dati sensibili o che i dati siano gestiti in modo non sicuro o non appropriato, segnalare un problema nel repository dotnet/sdk o inviare un messaggio di posta elettronica a dotnet@microsoft.com per indagini più approfondite.

La funzionalità di telemetria raccoglie i dati seguenti:

Versioni dell'SDK Dati
Tutte le date Timestamp della chiamata.
Tutte le date Comando richiamato (ad esempio, "build"), con hash a partire dalla versione 2.1.
Tutte le date Indirizzo IP di tre ottetti usato per determinare la posizione geografica.
Tutte le date Sistema operativo e versione.
Tutte le date ID Runtime (RID) in cui è in esecuzione l'SDK.
Tutte le date Versione SDK .NET.
Tutte le date Profilo di telemetria: valore facoltativo usato solo con consenso esplicito dell'utente e usato internamente a Microsoft.
>=2.0 Argomenti e opzioni di comando: vengono raccolti vari argomenti e opzioni (non stringhe arbitrarie). Vedere Opzioni raccolte. Con hash dopo la versione 2.1.300.
>=2.0 Se il 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 Report di esito positivo dell'installazione, con nome di file EXE del programma di installazione con hash.
>=2.1.300 Versione del kernel.
>=2.1.300 Versione di libc.
>=3.0.100 Indica se l'output è stato reindirizzato (true o false).
>=3.0.100 Per un arresto anomalo dell'interfaccia della riga di comando/SDK, il tipo di eccezione e la relativa analisi dello stack (nell'analisi dello stack inviata è incluso solo il codice dell'interfaccia della riga di comando/SDK). Per altre informazioni, vedere Telemetria delle eccezioni di arresto anomalo.
>=5.0.100 Hashed TargetFrameworkVersion usata per la compilazione (proprietà MSBuild)
>=5.0.100 Hashed RuntimeIdentifier usato per la compilazione (proprietà MSBuild)
>=5.0.100 Hashed SelfContained usato per la compilazione (proprietà MSBuild)
>=5.0.100 Hashed UseApphost usato 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'immissione del metodo principale del programma dell'interfaccia della riga di comando, misurando l’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 alla prima esecuzione.
>=5.0.202 Tempo trascorso per analizzare l'input dell'interfaccia della riga di comando.
>=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 usato per la compilazione (proprietà MSBuild)
>=6.0.104 Hashed_ReadyToRunCompilationFailures usato per la compilazione (proprietà MSBuild)
>=6.0.300 Se l'interfaccia della 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 Hashed PublishProtocol usato per la compilazione (proprietà MSBuild)
>=8.0.100 Hashed TargetPlatformIdentifier 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 l’SDK per dispositivi mobili .NET.
>=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 viene usata la funzionalità di rimozione IL di Mono AOT.
>=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 Versione usata del pacchetto del runtime di 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> Guida del comando richiesta.
dotnet new <arg> Nome del modello (con hash).
dotnet add <arg> Parola package o reference.
dotnet remove <arg> Parola package o reference.
dotnet list <arg> Parola package o reference.
dotnet sln <arg> Parola add, list o remove.
dotnet nuget <arg> Parola delete, locals o 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).

Un subset di comandi invia le opzioni selezionate se vengono usate, 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

Ad eccezione di --verbosity e --sdk-package-version, viene eseguito l'hashing di tutti gli altri valori a partire da .NET Core 2.1.100 SDK.

Telemetria motore di modelli

Il comando di creazione di un’istanza 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 delle eccezioni di arresto anomalo

In caso di arresto anomalo dell'interfaccia della riga di comando o dell'SDK di .NET, vengono raccolti il nome dell'eccezione e la traccia dello stack del codice dell'interfaccia della riga di comando o dell'SDK. Queste informazioni vengono raccolte per valutare i problemi e migliorare la qualità di .NET SDK e dell'interfaccia della riga di comando di .NET. Questo articolo include informazioni sui dati raccolti da Microsoft. Sono anche disponibili suggerimenti su come gli utenti che creano la propria versione di .NET SDK possono evitare la divulgazione accidentale di informazioni personali o sensibili.

L'interfaccia della riga di comando di .NET raccoglie informazioni solo per l'interfaccia della riga di comando o l'SDK e non per le eccezioni nell'applicazione. I dati raccolti contengono il nome dell'eccezione e l'analisi dello stack. L'analisi dello stack riguarda il codice dell'interfaccia della riga di comando o dell'SDK.

L'esempio seguente mostra 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 rilevare se l'interfaccia della riga di comando di .NET è in esecuzione in un ambiente di integrazione continua, l'interfaccia della riga di comando di .NET esegue il probe della presenza e dei valori di diverse variabili di ambiente note impostate da provider CI comuni.

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

Variabili Provider Azione
TF_BUILD Azure Pipelines Analizzare il valore booleano
GITHUB_ACTIONS Azioni di GitHub Analizzare il valore booleano
APPVEYOR Appveyor Analizzare il valore booleano
CI Molti/più Analizzare il valore booleano
TRAVIS Travis CI Analizzare il valore booleano
CIRCLECI CircleCI Analizzare il valore booleano
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services CodeBuild Controllare se tutti sono presenti e non null
BUILD_ID, BUILD_URL Jenkins Controllare se tutti sono presenti e non null
BUILD_ID, PROJECT_ID Google Cloud Build Controllare se tutti sono presenti e non null
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 di .NET e chiunque esegua una versione personalizzata di .NET SDK devono tenere conto del percorso del codice sorgente dell'SDK. Se si verifica un arresto anomalo durante l'uso di un'istanza di .NET SDK che rappresenta 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 sottoposto ad hashing.

Per questo motivo, le compilazioni personalizzate di .NET SDK non devono trovarsi in directory i cui nomi di percorso espongono informazioni personali o sensibili.

Vedi anche