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 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.

Cakupan

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

  • dotnet [path-to-app].dll

Telemetri dikumpulkan saat menggunakan salah satu 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 DOTNET_CLI_TELEMETRY_OPTOUT variabel lingkungan ke 1 atau true.

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

Penting

Untuk menolak setelah Anda memulai alat 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 saat Anda pertama kali menjalankan salah satu perintah .NET CLI (misalnya, dotnet build). Teks mungkin sedikit berbeda tergantung pada versi SDK yang Anda jalankan. Pengalaman "eksekusi 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 penolakan telemetri.

Poin 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 sangat penting bagi 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 dotnet@microsoft.com untuk penyelidikan.

Fitur telemetri mengumpulkan data berikut:

Versi SDK Data
Semua Stempel waktu pemanggilan.
Semua Perintah dipanggil (misalnya, "build"), di-hash mulai dari 2.1.
Semua Tiga alamat IP oktet yang digunakan untuk menentukan lokasi geografis.
Semua Sistem operasi dan versi.
Semua ID runtime bahasa umum (RID) yang dijalankan SDK.
Semua Versi SDK .NET.
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. Di-hash setelah 2.1.300.
>=2.0 Apakah SDK berjalan dalam kontainer atau tidak.
>=2.0 Kerangka kerja target (dari peristiwa TargetFramework), di-hash mulai dari 2.1.
>=2.0 Media Access Control (MAC) alamat (SHA256) di-hash.
>=2.0 Direktori kerja saat ini di-hash.
>=2.0 Instal laporan keberhasilan, dengan nama file exe alat penginstal yang di-hash.
>=2.1.300 Versi kernel.
>=2.1.300 Rilis/versi Libc.
>=3.0.100 Apakah output dialihkan atau tidak (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 digunakan untuk build di-hash (properti MSBuild)
>=5.0.100 RuntimeIdentifier yang digunakan untuk build di-hash (properti MSBuild)
>=5.0.100 SelfContained yang digunakan untuk build di-hash (properti MSBuild)
>=5.0.100 UseApphost yang digunakan untuk build di-hash (properti MSBuild)
>=5.0.100 Hashed OutputType digunakan untuk build (properti MSBuild)
>=5.0.201 PublishReadyToRun yang digunakan untuk build di-hash (properti MSBuild)
>=5.0.201 PublishTrimmed digunakan untuk build di-hash (properti MSBuild)
>=5.0.201 PublishSingleFile digunakan untuk build di-hash (properti MSBuild)
>=5.0.202 Waktu yang berlalu sejak proses dimulai hingga memasuki metode utama program CLI, mengukur host dan startup 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 eksekusi pertama.
>=5.0.202 Waktu yang berlalu untuk membuat Sertifikat ASP.NET pada eksekusi pertama.
>=5.0.202 Waktu yang berlalu untuk mengurai input CLI.
>=6.0.100 Arsitektur OS
>=6.0.104 PublishReadyToRunUseCrossgen2 digunakan untuk build di-hash (properti MSBuild)
>=6.0.104 Crossgen2PackVersion yang digunakan untuk build di-hash (properti MSBuild)
>=6.0.104 CompileListCount Hash yang digunakan untuk build (properti MSBuild)
>=6.0.104 _ReadyToRunCompilationFailures used for build di-hash (MSBuild property)
>=6.0.300 Jika CLI dipanggil dari lingkungan Integrasi Berkelanjutan. Untuk informasi selengkapnya, lihat Deteksi Integrasi Berkelanjutan.
>=7.0.100 PublishAot digunakan untuk build di-hash (properti MSBuild)
>=7.0.100 Hashed PublishProtocol digunakan untuk build (properti MSBuild)
>=8.0.100 Hashed TargetPlatformIdentifier yang digunakan untuk build (properti MSBuild)
>=8.0.100 Hashed HybridGlobalization yang digunakan untuk build (properti 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 IL strip 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 dikirim
dotnet help <arg> Bantuan perintah sedang dikueri.
dotnet new <arg> Nama templat (di-hash).
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:

Opsi Perintah
--verbosity Semua perintah
--language dotnet new
--configuration dotnet build, , dotnet cleandotnet publish, , dotnet run,dotnet test
--framework dotnet build, , dotnet cleandotnet publish, dotnet run, , dotnet test,dotnet vstest
--runtime dotnet build, dotnet publish
--platform dotnet vstest
--logger dotnet vstest
--sdk-package-version dotnet migrate

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

Telemetri mesin templat

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

  • --framework
  • --auth

Telemetri pengecualian crash

Jika .NET CLI/SDK mengalami crash, ia mengumpulkan nama pengecualian dan jejak tumpukan kode CLI/SDK. Informasi ini dikumpulkan untuk menilai masalah dan meningkatkan kualitas .NET SDK dan CLI. Artikel ini memberikan 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 hanya mengumpulkan informasi untuk pengecualian CLI/SDK, bukan pengecualian dalam aplikasi Anda. Data yang dikumpulkan berisi nama pengecualian dan jejak tumpukan. Jejak tumpukan ini adalah 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 CLI .NET 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.

Variable Penyedia Perbuatan
TF_BUILD Azure Pipelines Mengurai nilai Boolean
GITHUB_ACTIONS GitHub Actions Mengurai nilai Boolean
APPVEYOR Appveyor Mengurai nilai Boolean
CI Banyak/Paling Banyak Mengurai nilai Boolean
TRAVIS Travis CI Mengurai nilai Boolean
CIRCLECI Lingkaran CI Mengurai nilai Boolean
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services CodeBuild Periksa apakah semua ada dan non-null
BUILD_ID, BUILD_URL Jenkins Periksa apakah semua ada dan non-null
BUILD_ID, PROJECT_ID Google Cloud Build Periksa apakah semua ada dan non-null
TEAMCITY_VERSION TeamCity Periksa apakah ada dan non-null
JB_SPACE_API_URL JetBrains Space 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 build debug kustom atau dikonfigurasi dengan file simbol build kustom, jalur file sumber SDK dari komputer build dikumpulkan sebagai bagian dari jejak tumpukan dan tidak di-hash.

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

Lihat juga