Bagikan melalui


Telemetri .NET SDK dan .NET CLI

.NET SDK menyertakan fitur telemetri yang mengumpulkan data penggunaan dan mengirimkannya ke Microsoft saat Anda menggunakan perintah .NET CLI . Data penggunaan mencakup informasi pengecualian saat .NET CLI mengalami crash. .NET CLI dilengkapi dengan .NET SDK dan merupakan kumpulan kata kerja yang memungkinkan Anda membangun, menguji, dan menerbitkan aplikasi .NET Anda. Data telemetri membantu tim .NET memahami bagaimana alat digunakan sehingga dapat ditingkatkan. Informasi tentang kegagalan membantu tim menyelesaikan masalah dan memperbaiki bug.

Data yang dikumpulkan diterbitkan secara agregat di bawah Lisensi Atribusi Creative Commons . Beberapa data yang dikumpulkan diterbitkan di .NET CLI Telemetry Data.

Ruang lingkup

dotnet memiliki dua fungsi: untuk menjalankan aplikasi dan menjalankan perintah CLI. Telemetri tidak dikumpulkan ketika menggunakan dotnet untuk memulai aplikasi dalam format berikut:

  • dotnet [path-to-app].dll

Telemetri dikumpulkan saat menggunakan salah satu dari perintah .NET CLI, seperti:

  • dotnet build
  • dotnet pack
  • dotnet run

Cara menolak

Fitur telemetri .NET SDK diaktifkan secara default untuk distribusi Microsoft SDK. Untuk menolak fitur telemetri, atur variabel lingkungan DOTNET_CLI_TELEMETRY_OPTOUT ke 1 atau true.

Entri telemetri tunggal juga dikirim oleh penginstal .NET SDK saat penginstalan berhasil terjadi. Untuk menolak, atur variabel lingkungan DOTNET_CLI_TELEMETRY_OPTOUT sebelum Anda menginstal .NET SDK.

Penting

Untuk memilih keluar setelah Anda memulai penginstal: tutup alat penginstal, atur variabel lingkungan, lalu jalankan alat penginstal lagi dengan set nilai tersebut.

Pengungkapan

.NET SDK menampilkan teks yang mirip dengan yang berikut ini ketika Anda pertama kali menjalankan salah satu perintah .NET CLI (misalnya, dotnet build). Teks mungkin sedikit bervariasi tergantung pada versi SDK yang Anda jalankan. Pengalaman "penggunaan pertama" ini adalah bagaimana Microsoft memberi tahu Anda tentang pengumpulan data.

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

Untuk menonaktifkan pesan ini dan pesan selamat datang .NET, atur variabel lingkungan DOTNET_NOLOGO ke true. Perhatikan bahwa variabel ini tidak berpengaruh pada opsi keluar dari telemetri.

Titik data

Fitur telemetri tidak mengumpulkan data pribadi, seperti nama pengguna atau alamat email. Ini tidak memindai kode Anda dan tidak mengekstrak data tingkat proyek, seperti nama, repositori, atau penulis. Ini tidak mengekstrak konten file data apa pun yang diakses atau dibuat oleh aplikasi Anda, cadangan memori apa pun yang ditempati oleh objek aplikasi Anda, atau konten clipboard. Data dikirim dengan aman ke server Microsoft menggunakan teknologi Azure Monitor, disimpan di bawah akses terbatas, dan diterbitkan di bawah kontrol keamanan yang ketat dari sistem Azure Storage yang aman.

Melindungi privasi Anda penting untuk kami. Jika Anda menduga telemetri mengumpulkan data sensitif atau data tidak aman atau tidak pantas ditangani, ajukan masalah di repositori dotnet/sdk atau kirim email ke untuk penyelidikan.

Fitur telemetri mengumpulkan data berikut:

Versi SDK Data
Semua Tanda waktu pemanggilan.
Semua Perintah yang dipanggil (misalnya, "build"), di-hash mulai dari 2.1.
Semua Tiga alamat IP oktet yang digunakan untuk menentukan lokasi geografis.
Semua Sistem dan versi operasi.
Semua ID Runtime (RID) tempat SDK berjalan.
Semua Versi .NET SDK.
Semua Profil telemetri: nilai opsional yang hanya digunakan dengan keikutsertaan pengguna eksplisit dan digunakan secara internal di Microsoft.
>=2.0 Argumen dan opsi perintah: beberapa argumen dan opsi dikumpulkan (bukan string arbitrer). Lihat opsi yang dikumpulkan . Telah di-hash setelah 2.1.300.
>=2.0 Apakah SDK berjalan dalam kontainer.
>=2.0 Kerangka kerja target (dari acara TargetFramework), mulai di-hash dari versi 2.1.
>=2.0 Alamat Media Access Control (MAC) yang Telah Di-hash (SHA256).
>=2.0 Direktori kerja saat ini telah di-hash.
>=2.0 Laporan keberhasilan instalasi, dengan nama file exe penginstal yang di-hash.
>=2.1.300 Versi kernel.
>=2.1.300 Versi/rilis Libc.
>=3.0.100 Apakah output dialihkan (benar atau salah).
>=3.0.100 Pada crash CLI/SDK, jenis pengecualian dan jejak tumpukannya (hanya kode CLI/SDK yang disertakan dalam jejak tumpukan yang dikirim). Untuk informasi selengkapnya, lihat telemetri pengecualian Crash .
>=5.0.100 TargetFrameworkVersion yang telah di-hash digunakan untuk build (properti MSBuild)
>=5.0.100 Hashed RuntimeIdentifier yang digunakan untuk proses build (properti dari MSBuild)
>=5.0.100 Hashed SelfContained digunakan untuk kompilasi (properti MSBuild)
>=5.0.100 Hashed UseApphost digunakan untuk build (properti MSBuild)
>=5.0.100 OutputType yang telah di-hash digunakan untuk build (properti MSBuild)
>=5.0.201 Hashed PublishReadyToRun digunakan untuk pembangunan (properti MSBuild)
>=5.0.201 Hashed PublishTrimmed digunakan untuk build (properti MSBuild)
>=5.0.201 Hashed PublishSingleFile digunakan dalam proses build (properti MSBuild)
>=5.0.202 Waktu yang berlalu dari awal proses hingga masuk ke metode utama program CLI, mengukur waktu startup host dan runtime.
>=5.0.202 Waktu yang berlalu untuk langkah yang menambahkan Alat .NET ke jalur pada eksekusi pertama.
>=5.0.202 Waktu yang berlalu untuk menampilkan pemberitahuan penggunaan pertama kali pada saat dijalankan untuk pertama kali.
>=5.0.202 Waktu yang berlalu untuk pembuatan Sertifikat ASP.NET saat pertama kali dijalankan.
>=5.0.202 Waktu yang dibutuhkan untuk mengurai input CLI.
>=6.0.100 Arsitektur Sistem Operasi
>=6.0.104 PublishReadyToRunUseCrossgen2 yang sudah di-hash digunakan untuk build (properti MSBuild)
>=6.0.104 Versi Hashed Crossgen2Pack digunakan untuk build (properti MSBuild)
>=6.0.104 "Hashed CompileListCount" digunakan untuk build (properti MSBuild)
>=6.0.104 Hashed _ReadyToRunCompilationFailures digunakan dalam proses build (properti MSBuild)
>=6.0.300 Jika CLI dipanggil dari lingkungan Integrasi Kontinu. Untuk informasi selengkapnya, lihat Deteksi Integrasi Berkelanjutan.
>=7.0.100 Properti MSBuild 'Hashed PublishAot' digunakan untuk build
>=7.0.100 Protokol Publikasi Hashed digunakan untuk build (properti MSBuild)
>=8.0.100 TargetPlatformIdentifier yang telah di-hash digunakan untuk build (properti MSBuild)
>=8.0.100 Hashed HybridGlobalization yang digunakan untuk pembangunan (properti dalam MSBuild)
>=8.0.100 Apakah .NET Blazor WebAssembly SDK digunakan.
>=8.0.100 Apakah .NET WebAssembly SDK digunakan.
>=8.0.100 Apakah .NET MAUI digunakan.
>=8.0.100 Apakah .NET mobile SDK digunakan.
>=8.0.100 Apakah SDK seluler lainnya digunakan (seperti: Avalonia, Uno).
>=8.0.100 Apakah Mono AOT digunakan.
>=8.0.100 Apakah fitur strip IL pada framework Mono AOT digunakan?
>=8.0.100 Apakah interpreter Mono digunakan.
>=8.0.100 Apakah mode pustaka untuk seluler digunakan.
>=8.0.100 Apakah NativeAOT digunakan.
>=8.0.100 Versi paket runtime Mono yang digunakan.

Opsi yang dikumpulkan

Perintah tertentu mengirim data tambahan. Subset perintah mengirimkan argumen pertama:

Perintah Data argumen pertama yang dikirim
dotnet help <arg> Bantuan perintah sedang dicari.
dotnet new <arg> Nama templat (diproteksi dengan hashing).
dotnet add <arg> Kata package atau reference.
dotnet remove <arg> Kata package atau reference.
dotnet list <arg> Kata package atau reference.
dotnet sln <arg> Kata add, list, atau remove.
dotnet nuget <arg> Kata delete, locals, atau push.
dotnet workload <subcommand> <arg> Kata install, update, list, search, uninstall, repair, restore dan nama beban kerja (di-hash).
dotnet tool <subcommand> <arg> Kata install, update, list, search, uninstall, run dan nama alat dotnet (di-hash).

Subset perintah mengirimkan opsi yang dipilih jika digunakan, bersama dengan nilainya:

Pilihan Perintah
--verbosity Semua perintah
--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

Ketika SDK gagal menyelesaikan perintah bawaan, pemecah masalah perintah apa pun yang berhasil menyelesaikan perintah mengirimkan hash nama perintah bersama dengan nama jenis pemecah masalah perintah.

Kecuali untuk --verbosity dan --sdk-package-version, semua nilai lainnya di-hash dimulai dengan .NET Core 2.1.100 SDK.

Telemetri mesin templat

Perintah instansiasi templat dotnet new mengumpulkan data tambahan untuk templat yang ditulis Microsoft, dimulai dengan .NET Core 2.1.100 SDK:

  • --framework
  • --auth

Telemetri pengecualian kerusakan

Jika .NET CLI/SDK mengalami crash, akan mengumpulkan nama pengecualian dan jejak tumpukan dari kode CLI/SDK tersebut. Informasi ini dikumpulkan untuk menilai masalah dan meningkatkan kualitas .NET SDK dan CLI. Artikel ini menyediakan informasi tentang data yang kami kumpulkan. Ini juga memberikan tips tentang bagaimana pengguna membangun versi mereka sendiri dari .NET SDK dapat menghindari pengungkapan informasi pribadi atau sensitif yang tidak disengaja.

.NET CLI mengumpulkan informasi hanya untuk pengecualian CLI/SDK, bukan pengecualian dalam aplikasi Anda. Data yang dikumpulkan berisi nama pengecualian dan jejak tumpukan. Jejak tumpukan ini berasal dari kode CLI/SDK.

Contoh berikut menunjukkan jenis data yang dikumpulkan:

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)

Deteksi Integrasi Berkelanjutan

Untuk mendeteksi apakah .NET CLI berjalan di lingkungan Integrasi Berkelanjutan, .NET CLI memeriksa keberadaan dan nilai beberapa variabel lingkungan terkenal yang ditetapkan penyedia CI umum.

Daftar lengkap variabel lingkungan, dan apa yang dilakukan dengan nilainya, ditunjukkan di bawah ini. Perhatikan bahwa dalam setiap kasus, nilai variabel lingkungan tidak pernah dikumpulkan, hanya digunakan untuk mengatur bendera boolean.

Variabel Penyedia Perbuatan
TF_BUILD Azure Pipelines Mengurai nilai boolean
GITHUB_ACTIONS Tindakan GitHub Mengurai nilai boolean
APPVEYOR Appveyor Mengurai nilai boolean
CI Banyak/Paling Banyak Mengurai nilai boolean
TRAVIS Travis CI Mengurai nilai boolean
CIRCLECI Ci Lingkaran Mengurai nilai boolean
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services CodeBuild Periksa apakah semua ada dan tidak kosong
BUILD_ID, BUILD_URL Jenkins Periksa apakah semua ada dan tidak kosong
ID_BANGUN, ID_PROYEK Google Cloud Build Periksa apakah semua ada dan tidak kosong
TEAMCITY_VERSION TeamCity Periksa apakah ada dan non-null
JB_SPACE_API_URL Ruang JetBrains Periksa apakah ada dan non-null

Hindari pengungkapan informasi yang tidak disengaja

Kontributor .NET dan siapa pun yang menjalankan versi .NET SDK yang mereka bangun sendiri harus mempertimbangkan jalur ke kode sumber SDK mereka. Jika crash terjadi saat menggunakan .NET SDK yang merupakan debug build kustom atau dikonfigurasi dengan file simbol build kustom, path file sumber SDK dari mesin build dikumpulkan sebagai bagian dari pelacakan tumpukan dan tidak di-hash.

Karena itu, build kustom .NET SDK tidak boleh berada di direktori yang nama jalurnya mengekspos informasi pribadi atau sensitif.

Lihat juga