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.

Penginstal .NET SDK mengirimkan satu entri telemetri ketika penginstalan berhasil terjadi. Untuk menolak, atur variabel lingkungan DOTNET_CLI_TELEMETRY_OPTOUT sebelum Anda menginstal .NET SDK.

Penting

Untuk memilih keluar 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 output berikut saat 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. Variabel ini tidak mempengaruhi opsi keluar dari telemetri.

Nota

Perubahan mendasar: Perilaku pesan telemetri yang dikirim ke stderr telah diubah dalam versi terbaru dari .NET SDK. Untuk informasi selengkapnya, lihat perintah CLI dotnet mencatat data yang tidak relevan dengan perintah ke stderr.

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 dengan menggunakan teknologi Azure Monitor . Data disimpan di bawah akses terbatas dan diterbitkan di bawah kontrol keamanan yang ketat dari sistem Azure Storage yang aman.

Melindungi privasi Anda penting untuk Microsoft. Jika Anda menduga telemetri mengumpulkan data sensitif atau data tidak aman atau tidak tepat ditangani, ajukan masalah di repositori dotnet/sdk .

Untuk informasi selengkapnya tentang privasi dan data pribadi Anda yang dikumpulkan, lihat Pernyataan Privasi Microsoft.

Tab berikut menunjukkan data telemetri yang diambil oleh versi SDK:

  • SDK versi 10.0.100 dan yang lebih baru:
    • Pengidentifikasi proyek yang di-hash untuk dotnet run.
    • Jenis aplikasi aplikasi berbasis file atau berbasis proyek untuk dotnet run.
    • Nama profil peluncuran jika ditentukan untuk dotnet run.
    • Apakah profil peluncuran ditentukan untuk dotnet run.
    • Model konfigurasi pengaturan peluncuran yang digunakan (jika ada) untuk dotnet run.
    • Jumlah SDK yang digunakan untuk dotnet run.
    • Jumlah PackageReferences untuk dotnet run.
    • Jumlah ProjectReferences untuk dotnet run.
    • Jumlah properti tambahan untuk aplikasi berbasis file dengan dotnet run.
    • Apakah MSBuild digunakan untuk aplikasi berbasis file dengan dotnet run.
    • Apakah kompilator Roslyn digunakan untuk aplikasi berbasis file dengan dotnet run.
    • Nama agen LLM yang terdeteksi jika CLI dipanggil dari agen LLM. Untuk informasi selengkapnya, lihat Deteksi LLM.
    • Menangkap status global.json pada saat perintah dipanggil. Status adalah salah satu nilai berikut: not_found, valid, invalid_json, atau invalid_data.
    • Pabrik tugas MSBuild mana yang digunakan untuk memuat dan menjalankan tugas (termasuk tugas C# sebaris, tugas yang mendukung multithreading, dan tugas di luar proses), dan berapa banyak tugas yang dieksekusi.
    • Jumlah tugas MSBuild yang dijalankan di TaskHosts versus tugas yang tidak dijalankan di TaskHosts.

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

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.

Dimulai dengan .NET Core 2.1.100 SDK, SDK menghitung hash semua nilai ini, kecuali --verbosity dan --sdk-package-version.

Telemetri mesin templat

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

  • --framework
  • --auth

dotnet menjalankan telemetri

Dimulai dengan .NET SDK 10.0.100, dotnet run perintah mengumpulkan telemetri berbasis fitur untuk membantu mendorong pengembangan dan penggunaan aplikasi berbasis file.

Telemetri untuk semua dotnet run eksekusi:

  • Jenis aplikasi (berbasis file atau berbasis proyek)
  • Pengidentifikasi file atau proyek yang di-hash
  • Jumlah SDK yang digunakan
  • Jumlah Referensi Paket
  • Jumlah ReferensiProyek
  • Luncurkan penggunaan profil (baik --launch-profile atau --no-launch-profile digunakan)
  • Apakah profil peluncuran adalah profil default
  • Luncurkan model pengaturan yang diterapkan, jika ada

Telemetri hanya untuk aplikasi berbasis file:

  • Jumlah properti tambahan (misalnya, #:property direktif)
  • Apakah MSBuild digunakan untuk membangun
  • Apakah kompilator Roslyn digunakan secara langsung

Telemetri pengecualian kerusakan

Jika .NET CLI atau SDK mengalami kerusakan, ia mengumpulkan nama pengecualian dan penelusuran tumpukan kode dari CLI atau SDK. .NET CLI mengumpulkan informasi ini untuk menilai masalah dan meningkatkan kualitas .NET SDK dan CLI.

.NET CLI mengumpulkan informasi untuk pengecualian CLI atau SDK saja, bukan pengecualian dalam aplikasi Anda. Data yang dikumpulkan berisi nama pengecualian dan jejak tumpukan. Stack trace ini berasal dari kode CLI atau 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)

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, Anda tidak boleh menempatkan build kustom .NET SDK di direktori yang nama jalurnya mengekspos informasi pribadi atau sensitif.

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 berikut menunjukkan variabel lingkungan dan bagaimana .NET CLI menggunakan nilainya. .NET CLI tidak mengumpulkan nilai variabel lingkungan apa pun; ini hanya menggunakan nilai untuk mengatur bendera Boolean.

Variabel Penyedia Perbuatan
TF_BUILD Azure Pipelines (Alat otomatisasi alur kerja pengembangan perangkat lunak dari Microsoft) 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
BUILD_ID, PROJECT_ID 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

Deteksi LLM

Untuk mendeteksi apakah .NET CLI berjalan dalam konteks agen LLM, .NET CLI memeriksa keberadaan dan nilai beberapa variabel lingkungan yang ditetapkan agen LLM dan asisten pengodean AI.

Tabel berikut menunjukkan nama agen, variabel lingkungan yang digunakan untuk deteksi, dan nilai jenis agen yang dilaporkan. Nilai aktual variabel lingkungan ini tidak dikumpulkan—nilai tersebut hanya digunakan untuk mengidentifikasi jenis agen.

Agen LLM Variable Nilai
GitHub Copilot GITHUB_COPILOT_CLI_MODE "salinan"
Kode Claude CLAUDECODE claude
Cursor CURSOR_EDITOR kursor
Google Gemini GEMINI_CLI "gemini"

Jika .NET CLI mendeteksi beberapa agen, CLI menggabungkan nilai agen yang berbeda dengan koma untuk menghasilkan nilai akhir.

Lihat juga