Телеметрия .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 под ограниченным доступом и публикуются при строгих мерах безопасности.

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

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

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

  • Пакет SDK версии 11.0.100 и более поздних версий:
    • Данные телеметрии кэша выходных данных компилятора Roslyn:
      • Нашёл ли компилятор и восстановил ли кэшированный результат компиляции.
      • Результат попытки сохранить компиляцию в кэше.
      • Язык компилятора (C# или Visual Basic).
      • Время, затраченное на вычисление ключа кэша, восстановление кэшированного результата, сохранение результата, а также компиляцию и генерацию при промахе кэша.

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

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

Команда Данные первого аргумента, отправленные
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 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

Если 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 CircleCI Разобрать логическое значение
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 Space Проверка наличия и ненулевого значения

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

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

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

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

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

См. также