.NET SDK 和 .NET CLI 遙測

.NET SDK 包含遙測功能,可收集使用方式資料,並在您使用 .NET CLI 命令時傳送給 Microsoft。 使用方式資料包含 .NET CLI 損毀時的例外狀況資訊。 .NET CLI 隨附 .NET SDK,是可讓您建置、測試及發佈 .NET 應用程式的動詞集。 遙測資料可幫助 .NET 小組了解工具的使用方式,以進行改善。 失敗資訊可協助小組解決問題並修正 Bug。

根據 Creative Commons Attribution 授權 (英文),收集的資料以彙總形式發佈。 部分收集的資料會在 .NET CLI 遙測資料上發佈。

範圍

dotnet 有兩個功能:執行應用程式和執行 CLI 命令。 使用 dotnet 啟動應用程式時 (格式如下),「不會收集」遙測:

  • dotnet [path-to-app].dll

使用以下任何 .NET CLI 命令 時,則「會收集」遙測:

  • dotnet build
  • dotnet pack
  • dotnet run

如何選擇退出

.NET SDK 遙測功能依預設啟用,供 Microsoft 發佈 SDK。 若要退出遙測功能,請將 DOTNET_CLI_TELEMETRY_OPTOUT 環境變數設定為 1true

若 SDK 安裝成功,.NET SDK 安裝程式也會傳送單一遙測項目。 若要退出,請在安裝 .NET SDK 之前,先設定 DOTNET_CLI_TELEMETRY_OPTOUT 環境變數。

重要

若要在啟動安裝程式後退出,請關閉安裝程式、設定環境變數,然後使用該設定值再次執行安裝程式。

公開

.NET SDK 會在您第一次執行其中一個 .NET CLI 命令時 (例如 dotnet build),顯示類似下方的文字。 文字可能略有不同,視執行中的 SDK 版本而定。 這個「第一次執行」經驗是 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

若要停用此訊息和 .NET 歡迎訊息,請將 DOTNET_NOLOGO 環境變數設為 true。 請注意,此變數不會影響您退出遙測計畫。

資料點

遙測功能不會收集個人資料,例如使用者名稱或電子郵件地址。 它不會掃描您的程式碼,也不會擷取專案層級資料,例如名稱、存放庫或作者。 該變數不會擷取您應用程式存取或建立的任何資料檔案內容、您應用程式物件佔用的任何記憶體傾印,或剪貼簿的內容。 資料使用 Azure 監視器技術安全地傳送至 Microsoft 伺服器、在限制存取下保留,並在嚴格安全性控制下從安全的 Azure 儲存體系統發佈。

保護您的隱私權對我們而言很重要。 如果您懷疑遙測收集敏感性資料或資料處理的方式不安全或不適當,請在 dotnet/sdk (英文) 存放庫中提出問題或傳送電子郵件至 dotnet@microsoft.com 以進行調查。

遙測功能會收集下列資料:

SDK 版本 資料
全部 叫用的時間戳記。
全部 叫用的命令 (例如 "build"),從 2.1 開始已雜湊。
全部 用來判斷地理位置的三個八位元 IP 位址。
全部 作業系統和版本。
全部 SDK 正在執行的執行階段識別碼 (RID)。
全部 .NET SDK 版本。
全部 遙測設定檔:選擇性值,只能透過明確的使用者加入使用,且只能在 Microsoft 內部使用。
>=2.0 命令引數和選項:會收集數個引數和選項 (不是任意字串)。 請參閱收集的選項。 2.1.300 之後已雜湊。
>=2.0 SDK 是否正在容器中執行。
>=2.0 目標 Framework (來自 TargetFramework 事件),從 2.1 開始已雜湊。
>=2.0 雜湊的媒體存取控制 (MAC) 位址 (SHA256)。
>=2.0 雜湊的目前工作目錄。
>=2.0 使用雜湊的安裝程式 exe 檔名來安裝成功報告。
>=2.1.300 核心版本。
>=2.1.300 Libc 發行/版本。
>=3.0.100 輸出是否已重新導向 (true 或 false)。
>=3.0.100 CLI/SDK 損毀時的例外狀況類型及其堆疊追蹤 (只有 CLI/SDK 程式碼會包含在傳送的堆疊追蹤中)。 如需詳細資訊,請參閱損毀例外狀況遙測
>=5.0.100 用於組建的雜湊 TargetFrameworkVersion (MSBuild 屬性)
>=5.0.100 用於組建的雜湊 RuntimeIdentifier (MSBuild 屬性)
>=5.0.100 用於組建的雜湊 SelfContained (MSBuild 屬性)
>=5.0.100 用於組建的雜湊 UseApphost (MSBuild 屬性)
>=5.0.100 用於組建的雜湊 OutputType (MSBuild 屬性)
>=5.0.201 用於組建的雜湊 PublishReadyToRun (MSBuild 屬性)
>=5.0.201 用於組建的雜湊 PublishTrimmed (MSBuild 屬性)
>=5.0.201 用於組建的雜湊 PublishSingleFile (MSBuild 屬性)
>=5.0.202 從流程開始到進入 CLI 程式的主要方法所耗用的時間,可評估主機和執行階段啟動的時間。
>=5.0.202 第一次執行時,.NET 工具新增至路徑的步驟所耗用的時間。
>=5.0.202 第一次執行時,顯示首次使用通知所耗用的時間。
>=5.0.202 第一次執行時產生 ASP .NET 憑證所耗用的時間。
>=5.0.202 剖析 CLI 輸入所耗用的時間。
>=6.0.100 作業系統架構
>=6.0.104 用於組建的雜湊 PublishReadyToRunUseCrossgen2 (MSBuild 屬性)
>=6.0.104 用於組建的雜湊 Crossgen2PackVersion (MSBuild 屬性)
>=6.0.104 用於組建的雜湊 CompileListCount (MSBuild 屬性)
>=6.0.104 用於組建的雜湊 _ReadyToRunCompilationFailures (MSBuild 屬性)
>=6.0.300 如果透過「持續整合」環境叫用 CLI。 如需詳細資訊,請參閱持續整合偵測
>=7.0.100 用於組建的雜湊 PublishAot (MSBuild 屬性)
>=7.0.100 用於組建的雜湊 PublishProtocol (MSBuild 屬性)

收集的選項

某些命令會傳送額外的資料。 命令的子集會傳送第一個引數:

Command 傳送的第一個引數資料
dotnet help <arg> 要查詢的命令說明。
dotnet new <arg> 範本名稱 (已雜湊)。
dotnet add <arg> packagereference 一字。
dotnet remove <arg> packagereference 一字。
dotnet list <arg> packagereference 一字。
dotnet sln <arg> addlistremove 一字。
dotnet nuget <arg> deletelocalspush 一字。
dotnet workload <subcommand> <arg> 字組 installupdatelistsearchuninstallrepairrestore 和工作負載名稱 (已經過雜湊處理)。
dotnet tool <subcommand> <arg> 字組 installupdatelistsearchuninstallrun 和 dotnet 工具名稱 (已經過雜湊處理)。

命令的子集會傳送所選取選項 (如果已使用) 及其值:

選項 命令
--verbosity 所有命令
--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

除了 --verbosity--sdk-package-version 以外,所有其他值都會從 .NET Core 2.1.100 SDK 開始進行雜湊。

範本引擎遙測

dotnet new 範本具現化命令會從 .NET Core 2.1.100 SDK 開始收集其他資料,用於 Microsoft 撰寫的範本:

  • --framework
  • --auth

損毀例外狀況遙測

如果 .NET CLI/SDK 損毀,它會收集例外狀況名稱和 CLI/SDK 程式碼的堆疊追蹤。 收集這項資訊的目的在於評定問題,及改善 .NET SDK 和 CLI 的品質, 本文提供我們所收集資料的相關資訊。 這些資訊也提供建置自有 .NET SDK 版本的使用者如何避免意外洩漏個人或敏感性資訊的祕訣。

.NET CLI 只會收集 CLI/SDK 例外狀況的資訊,而不會收集您應用程式中的例外狀況資訊。 所收集資料包含例外狀況的名稱和堆疊追蹤。 此堆疊追蹤是 CLI/SDK 程式碼的堆疊追蹤。

下列範例會顯示所收集的資料類型:

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)

持續整合偵測

為了偵測 .NET CLI 是否在「持續整合」環境中執行,.NET CLI 會探查一般 CI 提供者設定的數個已知環境變數是否存在和這些變數的值。

環境變數的完整清單及其值完成的工作如下所示。 請注意,無論如何,系統都不會收集環境變數的值,只會用該值設定布林值旗標。

變數 提供者 動作
TF_BUILD Azure Pipelines 剖析布林值
GITHUB_ACTIONS GitHub 動作 剖析布林值
APPVEYOR Appveyor 剖析布林值
CI 多/最多 剖析布林值
TRAVIS Travis CI 剖析布林值
CIRCLECI Circle CI 剖析布林值
CODEBUILD_BUILD_ID、AWS_REGION Amazon Web Services CodeBuild 檢查所有專案是否存在且非 null
BUILD_ID、BUILD_URL Jenkins 檢查所有專案是否存在且非 null
BUILD_ID、PROJECT_ID Google Cloud Build 檢查所有專案是否存在且非 null
TEAMCITY_VERSION TeamCity 檢查是否存在且非 null
JB_SPACE_API_URL JetBrains Space 檢查是否存在且非 null

避免意外洩漏資訊

.NET 參與者及其他執行其自行建置 .NET SDK 版本的使用者,都應該考慮其 SDK 原始程式碼的路徑。 如果使用 .NET SDK 時發生損毀,且該 SDK 是自訂偵錯組建或透過自訂組建符號檔案進行設定,將在堆疊追蹤過程中從組建電腦收集 SDK 來源檔案路徑,且不會進行雜湊處理。

因此,.NET SDK 的自訂組建不應位於路徑名稱顯示個人或敏感性資訊的目錄。

另請參閱