.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
環境變數設定為 1
或 true
。
若 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 屬性) |
>=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 strip IL 功能。 |
>=8.0.100 | 無論是否使用 Mono 解譯器。 |
>=8.0.100 | 無論是否使用適用於行動裝置的程式庫模式。 |
>=8.0.100 | 無論是否使用 NativeAOT。 |
>=8.0.100 | 已使用 Mono 執行階段套件版本。 |
收集的選項
某些命令會傳送額外的資料。 命令的子集會傳送第一個引數:
Command | 傳送的第一個引數資料 |
---|---|
dotnet help <arg> |
要查詢的命令說明。 |
dotnet new <arg> |
範本名稱 (已雜湊)。 |
dotnet add <arg> |
package 或 reference 一字。 |
dotnet remove <arg> |
package 或 reference 一字。 |
dotnet list <arg> |
package 或 reference 一字。 |
dotnet sln <arg> |
add 、list 或 remove 一字。 |
dotnet nuget <arg> |
delete 、locals 或 push 一字。 |
dotnet workload <subcommand> <arg> |
字組 install 、update 、list 、search 、uninstall 、repair 、restore 和工作負載名稱 (已經過雜湊處理)。 |
dotnet tool <subcommand> <arg> |
字組 install 、update 、list 、search 、uninstall 、run 和 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 的自訂組建不應位於路徑名稱顯示個人或敏感性資訊的目錄。