Поделиться через


Телеметрия .NET SDK и .NET CLI

.NET SDK включает функцию телеметрии, которая собирает данные об использовании и отправляет их в Microsoft при использовании команд .NET CLI. Данные об использовании содержат информацию об исключении в случае сбоя командной строки .NET CLI. Интерфейс командной строки .NET поставляется с пакетом SDK для .NET и представляет собой набор команд, позволяющих создавать, тестировать и публиковать приложения .NET. Данные телеметрии помогают команде .NET понять, как используются средства, чтобы их можно было улучшить. Сведения о сбоях помогают команде устранять проблемы и устранять ошибки.

Собранные данные публикуются в совокупном виде под лицензией Creative Commons Attribution License. Некоторые собранные данные публикуются на .NET CLI данные телеметрии.

Размах

dotnet имеет две функции: запускать приложения и выполнять команды CLI. Данные телеметрии не собираются при использовании dotnet для запуска приложения в следующем формате:

  • dotnet [path-to-app].dll

Данные телеметрии собираются при использовании одной из команд .NET CLI, например:

  • dotnet build
  • dotnet pack
  • dotnet run

Как отказаться

Функция телеметрии пакета SDK для .NET включена по умолчанию для дистрибутивов Пакета SDK майкрософт. Чтобы отказаться от функции телеметрии, задайте для переменной среды DOTNET_CLI_TELEMETRY_OPTOUT значение 1 или true.

Установщик пакета SDK для .NET отправляет одну запись телеметрии при успешной установке. Чтобы отказаться, задайте переменную среды DOTNET_CLI_TELEMETRY_OPTOUT перед установкой пакета SDK для .NET.

Важный

Чтобы отказаться от установки: закройте установщик, задайте переменную среды, а затем снова запустите установщик с этим набором значений.

Раскрытие

Пакет SDK для .NET отображает текст, аналогичный следующим выходным данным при первом выполнении одной из команд .NET CLI (например, dotnet build). Текст может немного отличаться в зависимости от версии запущенного пакета SDK. Этот «опыт первого запуска» — способ, которым компания Майкрософт уведомляет вас о сборе данных.

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. Эта переменная не влияет на отказ от телеметрии.

Замечание

Критическое изменение: Поведение телеметрических сообщений, записываемых в stderr, изменилось в последних версиях SDK для .NET. Дополнительные сведения см. в материале команды dotnet CLI фиксируют данные, не относящиеся к команде, в stderr.

Точки данных

Функция телеметрии не собирает персональные данные, такие как имена пользователей или адреса электронной почты. Он не сканирует код и не извлекает данные уровня проекта, такие как имя, репозиторий или автор. Он не извлекает содержимое файлов данных, к которым обращаются или создаются приложениями, дампы любой памяти, занятой объектами ваших приложений, или содержимое буфера обмена. Данные отправляются безопасно на серверы Майкрософт с помощью технологии Azure Monitor . Данные хранятся в защищенных системах Azure Storage под ограниченным доступом и публикуются при строгих мерах безопасности.

Защита конфиденциальности важна для Майкрософт. Если вы подозреваете, что данные телеметрии собирают конфиденциальные данные или данные небезопасно обрабатываются, отправьте проблему в репозитории dotnet/sdk .

Дополнительные сведения о конфиденциальности и собранных персональных данных см. в заявлении о конфиденциальности Майкрософт.

На следующих вкладках показаны данные телеметрии, захваченные версией пакета SDK:

  • Пакет SDK версии 10.0.100 и более поздних версий:
    • Хешированный идентификатор проекта для dotnet run.
    • Тип приложения: файловое или проектное для dotnet run.
    • Имя профиля запуска, если он указан для dotnet run.
    • Указан ли профиль запуска для dotnet run.
    • Модель конфигурации параметров запуска, которая используется (если используется) для dotnet run.
    • Количество пакетов SDK, используемых для dotnet run.
    • Количество PackageReferences для dotnet run.
    • Число ссылок ProjectReferences для dotnet run.
    • Количество дополнительных свойств для приложений на основе файлов с dotnet run.
    • Использовался ли MSBuild для файловых приложений.dotnet run
    • Использовался ли компилятор Roslyn для приложений, работающих с файлами с dotnet run.
    • Обнаруженное имя агента LLM, если интерфейс командной строки был вызван агентом LLM. Дополнительные сведения см. в разделе "Обнаружение LLM".
    • global.json Записывает состояние во время вызова команды. Состояние является одним из следующих значений: not_found, valid, invalid_json или invalid_data.
    • Какие фабрики задач MSBuild используются для загрузки и выполнения задач (включая встроенные задачи C#, многопоточные и внепроцессные задачи), а также количество выполняемых ими задач.
    • Количество задач MSBuild, выполняемых в TaskHosts и задачах, не выполняемых в TaskHosts.

Собранные параметры

Некоторые команды отправляют дополнительные данные. Подмножество команд отправляет первый аргумент:

Команда Данные первого аргумента, отправленные
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 cleandotnet publish, dotnet rundotnet test
--framework dotnet build, , dotnet cleandotnet publishdotnet rundotnet test,dotnet vstest
--runtime dotnet build, dotnet publish
--platform dotnet vstest
--logger dotnet vstest
--sdk-package-version dotnet migrate

Если SDK не может разрешить встроенную команду, любой резолвер команд, который успешно разрешает команду, отправляет хэш имени команды вместе с именем типа резолвера команд.

Начиная с пакета SDK для .NET Core 2.1.100, пакет SDK хэширует все эти значения, кроме --verbosity и --sdk-package-version.

Телеметрия обработчика шаблонов

Начиная с пакета SDK для .NET Core 2.1.100 команда dotnet new создания шаблона собирает дополнительные данные для шаблонов, созданных Корпорацией Майкрософт:

  • --framework
  • --auth

Dotnet run telemetry

Начиная с .NET SDK 10.0.100, команда dotnet run собирает телеметрию функциональности, чтобы содействовать разработке и использованию приложений, работающих с файлами.

Данные телеметрии для всех dotnet run выполнений:

  • Тип приложения (на основе файлов или на основе проекта)
  • Хэшируемый проект или идентификатор файла
  • Количество используемых пакетов SDK
  • Количество PackageReferences
  • Число ссылок ProjectReferences
  • Использование профиля при запуске (независимо от того, использовался ли --launch-profile или --no-launch-profile)
  • Указывает, является ли профиль запуска профилем по умолчанию
  • Применена модель параметров запуска( если она есть)

Данные телеметрии только для приложений на основе файлов:

  • Количество дополнительных свойств (например, #:property директивы)
  • Использовался ли MSBuild для сборки?
  • Используется ли компилятор Roslyn напрямую

Данные телеметрии исключений аварийного сбоя

Если интерфейс командной строки или пакет SDK для .NET завершается сбоем, он собирает имя исключения и трассировку стека кода CLI или SDK. Интерфейс командной строки .NET собирает эти сведения для оценки проблем и улучшения качества пакета SDK для .NET и CLI.

Интерфейс командной строки .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 и другие пользователи, работающие с версией пакета SDK для .NET, которые они создали сами, должны рассмотреть путь к исходному коду пакета SDK. Если происходит сбой при использовании пакета SDK для .NET, который является пользовательской сборкой отладки или настроен с помощью пользовательских файлов символов сборки, путь к исходному файлу пакета SDK с компьютера сборки собирается в рамках трассировки стека и не хэшируется.

Из-за этого не следует размещать пользовательские сборки пакета SDK для .NET в каталогах, имена путей которых предоставляют личную или конфиденциальную информацию.

Обнаружение непрерывной интеграции

Чтобы определить, работает ли .NET CLI в среде непрерывной интеграции, интерфейс командной строки .NET проверяет наличие и значения нескольких известных переменных среды, которые задают общие поставщики CI.

В следующем списке показаны переменные среды и использование .NET CLI их значений. Интерфейс командной строки .NET не собирает значение любой переменной среды; Он использует только значение для задания логического флага.

Переменные Поставщик Действие
TF_BUILD Azure Pipelines (система конвейеров Azure) Разобрать логическое значение
GITHUB_ACTIONS Действия GitHub Разобрать логическое значение
APPVEYOR Appveyor Разобрать логическое значение
CI Многие или большинство Разобрать логическое значение
TRAVIS Трэвис CI Разобрать логическое значение
CIRCLECI Кольцевая CI Разобрать логическое значение
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services CodeBuild (сервис для автоматизации сборки и тестирования) Проверьте, что все значения присутствуют и не равны NULL.
BUILD_ID, BUILD_URL Дженкинс Проверьте, что все значения присутствуют и не равны NULL.
BUILD_ID, PROJECT_ID Google Cloud Build Проверьте, что все значения присутствуют и не равны NULL.
TEAMCITY_VERSION TeamCity Проверка наличия и ненулевого значения
JB_SPACE_API_URL Пространство JetBrains Проверка наличия и ненулевого значения

Обнаружение LLM

Чтобы определить, выполняется ли интерфейс командной строки .NET в контексте агента LLM, интерфейс командной строки .NET проверяет наличие и значения нескольких переменных среды, заданных агентами LLM и помощниками по программированию ИИ.

В следующей таблице показаны имя агента, переменная среды, используемая для обнаружения, и значение указанного типа агента. Фактические значения этих переменных среды не собираются— они используются только для идентификации типа агента.

Агент LLM Variable Ценность
GitHub Copilot GITHUB_COPILOT_CLI_MODE Копилот-система
Код Клода CLAUDECODE Клод
Cursor CURSOR_EDITOR курсор
Google Gemini GEMINI_CLI "близнецы"

Если интерфейс командной строки .NET обнаруживает несколько агентов, он объединяет различные значения агента с запятой для создания окончательного значения.

См. также