Телеметрия .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.

Точки данных

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

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

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

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

  • SDK версии 11.0.200 и более поздних версий:

  • Пакет SDK версии 11.0.100 и более поздних версий:

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

классификация использования сотрудниками Microsoft

Начиная с пакета SDK .NET 11.0.200, интерфейс командной строки обнаруживает признаки того, что текущий пользователь является сотрудником Microsoft. Эта классификация измеряет использование сотрудниками Microsoft интерфейса командной строки .NET. Использование Microsoft продуктов не приводит к положительной классификации.

Тег Данные
dotnet.cli.is_microsoft_internal Обнаружены ли признаки того, что текущий пользователь является сотрудником Microsoft.
dotnet.cli.microsoft_internal_source Источник, который обнаружил доказательства наличия сотрудника Microsoft. Сообщается только для положительного результата.
dotnet.cli.microsoft_internal_alias Нормализованный псевдоним учетной записи сотрудника Microsoft. Указывается только для положительного результата за пределами CI.
dotnet.cli.microsoft_internal_domain Нормализованный корпоративный домен. Отображается только для положительного результата за пределами CI.

За пределами CI интерфейс командной строки может использовать существующие учетные данные GitHub для запроса, принадлежит ли учетная запись организации Microsoft. Интерфейс командной строки отправляет учетные данные только в API GitHub для этой проверки. Интерфейс командной строки никогда не кэширует учетные данные или добавляет их в данные телеметрии. Логины GitHub не используются в качестве псевдонимов телеметрии.

Интерфейс командной строки не выполняет проверки идентификации GitHub в CI. CLI также подавляет псевдонимы и значения домена в CI.

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

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

Команда Данные первого аргумента, отправленные
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 обнаруживает несколько агентов, он объединяет различные значения агента с запятой для создания окончательного значения.

См. также