共用方式為


.NET SDK 和 .NET CLI 遙測

.NET SDK 包含遙測功能,可收集使用量數據,並在 您使用 .NET CLI 命令時,將其傳送至Microsoft。 使用方式數據報含 .NET CLI 當機時的例外狀況資訊。 .NET CLI 隨附 .NET SDK,是一組動詞,可讓您建置、測試及發佈 .NET 應用程式。 遙測數據可協助 .NET 小組瞭解工具的使用方式,以便改善這些工具。 失敗的相關信息可協助小組解決問題並修正錯誤。

收集的數據會根據 Creative Commons 屬性授權匯總發佈。 某些收集的數據會發佈在 .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

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

重要

若要在啟動安裝程式之後選擇退出:關閉安裝程式,設定環境變數,然後在環境變數已設定的情況下,再次執行安裝程式。

披露

當您第一次執行其中一個 .NET CLI 命令時,.NET SDK 會顯示類似下列的文字 (例如,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 Monitor 技術安全地傳送至 Microsoft 伺服器,在受限制的存取權下儲存,並在安全的 Azure Storage 系統中遵循嚴格的安全性控制發佈。

保護您的隱私權對我們很重要。 如果您懷疑遙測正在收集敏感數據或數據不安全或處理不當,請在 dotnet/sdk 存放庫中提出問題,或傳送電子郵件給 dotnet@microsoft.com 進行調查。

遙測功能會收集下列數據:

SDK 版本 數據
調用的時間戳記。
從 2.1 版本開始,命令(例如,“build”)進行哈希。
用來判斷地理位置的三個八位IP位址。
操作系統和版本。
SDK 所執行的執行時間識別碼(RID)。
.NET SDK 版本。
遙測配置檔:這是可選值,僅在使用者需要明確選擇加入時才會使用,並在微軟內部使用。
>=2.0 命令自變數和選項:收集數個自變數和選項(而非任意字串)。 請參閱由 收集的選項。 在 2.1.300 版本後進行哈希。
>=2.0 SDK 是否在容器中執行。
>=2.0 從 2.1 開始進行雜湊的目標框架(來自 TargetFramework 事件)。
>=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 用於建置的 Hashed 自包含 (MSBuild 属性)
>=5.0.100 已哈希的 UseApphost 用於建置(MSBuild 屬性)
>=5.0.100 用於建置的哈希 OutputType (MSBuild 屬性)
>=5.0.201 用於建置的哈希 PublishReadyToRun (MSBuild 屬性)
>=5.0.201 用於建置的 Hashed 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 OS 架構
>=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 用於建置的 Hashed PublishAot(MSBuild 屬性)
>=7.0.100 用於建置的已哈希的 PublishProtocol(MSBuild 屬性)
>=8.0.100 用於建置的哈希值「TargetPlatformIdentifier」(MSBuild 屬性)
>=8.0.100 用於建置的哈希化HybridGlobalization(MSBuild 屬性)
>=8.0.100 是否使用 .NET Blazor WebAssembly SDK。
>=8.0.100 是否使用 .NET WebAssembly SDK。
>=8.0.100 是否使用 .NET MAUI。
>=8.0.100 是否使用 .NET 行動 SDK。
>=8.0.100 是否使用其他行動 SDK(例如:Avalonia、Uno)。
>=8.0.100 是否使用Mono AOT。
>=8.0.100 Mono AOT 是否使用剝離 IL 功能。
>=8.0.100 是否使用Mono解釋器。
>=8.0.100 是否使用行動裝置的圖書館模式。
>=8.0.100 是否使用 NativeAOT。
>=8.0.100 已使用 Mono 執行環境套件版本。

收集的選項

某些命令會傳送其他數據。 命令的子集會傳送第一個參數:

命令 傳送的第一個自變數數據
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 builddotnet cleandotnet publishdotnet rundotnet test
--framework dotnet builddotnet cleandotnet publishdotnet rundotnet testdotnet vstest
--runtime dotnet builddotnet publish
--platform dotnet vstest
--logger dotnet vstest
--sdk-package-version dotnet migrate

當 SDK 無法解析內建命令時,任何成功解析命令的命令解析程式會傳送命令名稱的哈希,以及命令解析程式類型的名稱。

除了 --verbosity--sdk-package-version之外,所有其他值都是從 .NET Core 2.1.100 SDK 開始哈希。

範本引擎遙測

從 .NET Core 2.1.100 SDK 開始,dotnet new 範本具現化命令會收集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 Actions 解析布爾值
APPVEYOR Appveyor 解析布爾值
CI 多/大多數 解析布爾值
崔維斯 Travis CI 解析布爾值
CIRCLECI 圓形 CI 解析布爾值
CODEBUILD_BUILD_ID,AWS_REGION 亞馬遜雲端服務的 CodeBuild 檢查所有項目是否存在且非 "null"
BUILD_ID,BUILD_URL 詹金斯 檢查所有項目是否存在且非 "null"
BUILD_ID,PROJECT_ID Google Cloud Build 檢查所有項目是否存在且非 "null"
TEAMCITY_VERSION TeamCity 檢查是否存在和非空值
JB_SPACE_API_URL JetBrains Space 檢查是否存在和非空值

避免不小心洩漏資訊

.NET 參與者和執行其建置之 .NET SDK 版本的其他人,都應該考慮其 SDK 原始程式碼的路徑。 如果使用自定義偵錯組建或以自定義組建符號檔設定的 .NET SDK 時發生當機,則會收集來自組建計算機的 SDK 原始程式檔路徑做為堆棧追蹤的一部分,而且不會進行哈希處理。

因此,.NET SDK 的自定義組建不應位於路徑名稱公開個人或敏感性資訊的目錄中。

另請參閱