Прочитать на английском

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


Телеметрия .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. Обратите внимание, что эта переменная не влияет на отказ от телеметрии.

Точки данных

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

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

Функция телеметрии собирает следующие данные:

Версии пакета SDK Данные
Все Метка времени вызова.
Все Команда, вызванная (например, "сборка"), хэширована начиная с версии 2.1.
Все Трёхоктетный IP-адрес, используемый для определения географического расположения.
Все Операционная система и версия.
Все Идентификатор среды выполнения (RID), на котором выполняется пакет SDK.
Все Версия пакета SDK для .NET.
Все Профиль телеметрии: необязательное значение, используемое только с явным согласием пользователя и используемым внутри корпорации Майкрософт.
>=2.0 Аргументы и параметры команд: собираются несколько аргументов и параметров (не произвольные строки). См. собранные параметры . Хэширован после версии 2.1.300.
>=2.0 Выполняется ли пакет SDK в контейнере.
>=2.0 Целевые платформы (из события 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 Hashed TargetFrameworkVersion, используемый для сборки (свойство MSBuild)
>=5.0.100 Хешированный идентификатор среды выполнения, используемый для сборки (свойство MSBuild)
>=5.0.100 Хэшированные selfContained, используемые для сборки (свойство MSBuild)
>=5.0.100 Хэшированный UseApphost, применяемый для сборки (свойство MSBuild)
>=5.0.100 Hashed OutputType, используемый для сборки (свойство MSBuild)
>=5.0.201 Хешированный PublishReadyToRun, используемый для сборки (свойство MSBuild)
>=5.0.201 Используется Hashed PublishTrimmed для сборки (свойство MSBuild)
>=5.0.201 Hashed 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 Hashed PublishReadyToRunUseCrossgen2, используемый для сборки (свойство MSBuild)
>=6.0.104 Hashed Crossgen2PackVersion, используемый для сборки (свойство MSBuild)
>=6.0.104 Hashed CompileListCount, используемый для сборки (свойство MSBuild)
>=6.0.104 Хэшированные значения _ReadyToRunCompilationFailures, которые используются для сборки (это свойство MSBuild)
>=6.0.300 Если интерфейс командной строки был вызван из среды непрерывной интеграции. Для получения дополнительной информации см. Обнаружение непрерывной интеграции.
>=7.0.100 Hashed PublishAot, используемый для сборки (свойство MSBuild)
>=7.0.100 Hashed PublishProtocol, используемый при сборке (свойство MSBuild)
>=8.0.100 Хешированный TargetPlatformIdentifier, используемый для сборки (свойство MSBuild)
>=8.0.100 Хэширо́ванная HybridGlobalization, используемая для сборки (свойство MSBuild)
>=8.0.100 Используется ли пакет SDK для .NET Blazor WebAssembly.
>=8.0.100 Используется ли пакет SDK для .NET WebAssembly.
>=8.0.100 Используется ли .NET MAUI.
>=8.0.100 Используется ли пакет SDK для .NET для мобильных устройств.
>=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.

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

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

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

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

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

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

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

  • --framework
  • --auth

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

Если .NET CLI/SDK завершается сбоем, он собирает имя исключения и трассировку стека в коде CLI/SDK. Эти сведения собираются для оценки проблем и улучшения качества пакета SDK для .NET и ИНТЕРФЕЙСА командной строки. В этой статье содержатся сведения о собираемых данных. Он также содержит советы о том, как пользователи строят собственную версию пакета SDK для .NET, чтобы избежать непреднамеренного раскрытия личных или конфиденциальных сведений.

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

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

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

Избегайте непреднамеренного раскрытия информации

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

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

См. также