다음을 통해 공유


.NET SDK 및 .NET CLI 원격 분석

.NET SDK 사용량 현황 데이터를 수집하고 .NET CLI 명령을 사용할 때 Microsoft로 보내는 원격 분석 기능이 포함되어 있습니다. 사용량 현황 데이터에는 .NET CLI가 충돌할 때의 예외 정보가 포함됩니다. .NET CLI는 .NET SDK와 함께 제공되며 .NET 앱을 빌드, 테스트 및 게시할 수 있는 동사 집합입니다. 원격 분석 데이터는 .NET 팀이 도구를 사용하는 방법을 이해하여 개선할 수 있도록 도와줍니다. 실패에 대한 정보는 팀이 문제를 해결하고 버그를 해결하는 데 도움이 됩니다.

수집된 데이터는 크리에이티브 커먼즈 저작자 표시 라이선스에 따라 집계하여 게시됩니다. 수집된 데이터 중 일부는 .NET CLI 원격 분석 데이터에 게시됩니다.

범위

dotnet 에는 앱을 실행하고 CLI 명령을 실행하는 두 가지 함수가 있습니다. 다음 형식으로 애플리케이션을 시작하기 위해 를 사용할 때 원격 분석 dotnet은 수집되지 않습니다.

  • dotnet [path-to-app].dll

원격 분석 다음과 같은 .NET CLI 명령사용할 때 수집됩니다.

  • dotnet build
  • dotnet pack
  • dotnet run

옵트아웃하는 방법

.NET SDK 원격 분석 기능은 SDK의 Microsoft 배포에 대해 기본적으로 사용하도록 설정됩니다. 원격 분석 기능을 제외하려면 DOTNET_CLI_TELEMETRY_OPTOUT 환경 변수를 1 또는 true로 설정하십시오.

설치에 성공하면 .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_NOLOGOtrue .로 설정합니다. 이 변수는 원격 분석 옵트아웃에 영향을 주지 않습니다.

비고

주요 변경: 최신 버전의 .NET SDK에서 stderr에 작성된 원격 분석 메시지의 동작이 변경되었습니다. 자세한 내용은 dotnet CLI 명령이 명령과 관련 없는 데이터를 stderr에 기록하는 것을 참조하세요.

데이터 포인트

원격 분석 기능은 사용자 이름 또는 전자 메일 주소와 같은 개인 데이터를 수집하지 않습니다. 코드를 검사하지 않으며 이름, 리포지토리 또는 작성자와 같은 프로젝트 수준 데이터를 추출하지 않습니다. 앱에서 액세스하거나 만든 데이터 파일의 콘텐츠, 앱 개체가 차지하는 메모리 덤프 또는 클립보드의 콘텐츠는 추출하지 않습니다. 데이터는 Azure Monitor 기술을 사용하여 Microsoft 서버로 안전하게 전송됩니다. 데이터는 제한된 액세스로 유지되며 보안 Azure Storage 시스템의 엄격한 보안 제어에 따라 게시됩니다.

개인 정보 보호는 Microsoft에 중요합니다. 원격 분석이 중요한 데이터를 수집하거나 데이터가 안전하지 않거나 부적절하게 처리되는 것으로 의심되는 경우 dotnet/sdk 리포지토리에 문제를 제출합니다.

수집된 개인 정보 및 개인 데이터에 대한 자세한 내용은 Microsoft 개인정보처리방침을 참조하세요.

다음 탭은 SDK 버전에서 캡처한 원격 분석 데이터를 보여 줍니다.

  • SDK 버전 10.0.100 이상:
    • dotnet run에 대한 해시된 프로젝트 식별자입니다.
    • 파일 기반 앱 또는 프로젝트 기반 dotnet run의 애플리케이션 유형입니다.
    • dotnet run와 관련하여 지정된 경우, 시작 프로필의 이름입니다.
    • dotnet run에 대한 시작 프로필 지정 여부입니다.
    • 에 사용되는 시작 설정 구성 모델(있는 경우)입니다 dotnet run.
    • 에 사용되는 SDK 수입니다 dotnet run.
    • dotnet run에 대한 PackageReferences의 수입니다.
    • 에 대한 ProjectReferences 수입니다 dotnet run.
    • dotnet run을 사용하는 파일 기반 앱의 추가 속성 수입니다.
    • MSBuild가 .와 함께 dotnet run파일 기반 앱에 사용되었는지 여부
    • 로슬린 컴파일러가 dotnet run을 사용하는 파일 기반 앱에 사용되었는지 여부
    • CLI가 LLM 에이전트에서 호출된 경우 검색된 LLM 에이전트 이름입니다. 자세한 내용은 LLM 검색을 참조하세요.
    • 명령이 global.json 호출될 때의 상태를 캡처합니다. 상태는 not_found, 유효, invalid_json 또는 invalid_data 값 중 하나입니다.
    • 어떤 MSBuild 작업 팩터리가 태스크(인라인 C# 태스크, 다중 스레드 인식 태스크 및 Out-of-process 태스크 포함)를 로드하고 실행하는지와 그들이 몇 개의 태스크를 실행하는지입니다.
    • TaskHosts에서 실행된 MSBuild 작업 수와 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 clean, dotnet publish, dotnet rundotnet test
--framework dotnet build, dotnet clean, dotnet publish, dotnet run, dotnet testdotnet vstest
--runtime dotnet build, dotnet publish
--platform dotnet vstest
--logger dotnet vstest
--sdk-package-version dotnet migrate

SDK가 기본 제공 명령을 해결하지 못하면 명령을 성공적으로 확인하는 모든 명령 확인자는 명령 확인자 형식의 이름과 함께 명령 이름의 해시를 보냅니다.

.NET Core 2.1.100 SDK부터 SDK는 다음을 제외한 --verbosity--sdk-package-version모든 값을 해시합니다.

템플릿 엔진 원격 측정

.NET Core 2.1.100 SDK dotnet new 부터 템플릿 인스턴스화 명령은 Microsoft에서 작성한 템플릿에 대한 추가 데이터를 수집합니다.

  • --framework
  • --auth

dotnet run telemetry

.NET SDK 10.0.100부터, 해당 명령은 파일 기반 앱의 개발과 사용을 개선하기 위해 기능 사용 데이터를 수집합니다.

모든 dotnet run 실행에 대한 원격 분석:

  • 애플리케이션 유형(파일 기반 또는 프로젝트 기반)
  • 해시된 프로젝트 또는 파일 식별자
  • 사용된 SDK 수
  • PackageReferences의 수
  • 프로젝트 참조 수
  • 프로필 시작 시 (--launch-profile 또는 --no-launch-profile가 사용되었는지 여부)
  • 시작 프로필이 기본 프로필인지 여부
  • 적용된 설정 모델 시작(있는 경우)

파일 기반 앱만을 위한 원격 분석:

  • 추가 속성 수(예: #:property 지시문)
  • MSBuild가 빌드에 사용되었는지 여부
  • Roslyn 컴파일러가 직접 사용되었는지 여부

충돌 예외 원격 분석

.NET CLI 또는 SDK가 충돌하는 경우 CLI 또는 SDK 코드의 예외 및 스택 추적의 이름을 수집합니다. .NET CLI는 이 정보를 수집하여 문제를 평가하고 .NET SDK 및 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 기여자 및 자체 빌드한 .NET SDK 버전을 실행하는 다른 모든 사용자는 SDK 소스 코드의 경로를 고려해야 합니다. 사용자 지정 디버그 빌드이거나 사용자 지정 빌드 기호 파일로 구성된 .NET SDK를 사용하는 동안 충돌이 발생하면 빌드 머신의 SDK 원본 파일 경로가 스택 추적의 일부로 수집되고 해시되지 않습니다.

따라서 경로 이름이 개인 정보 또는 중요한 정보를 노출하는 디렉터리에 .NET SDK의 사용자 지정 빌드를 배치해서는 안 됩니다.

연속 통합 감지

.NET CLI가 연속 통합 환경에서 실행되고 있는지 감지하기 위해 .NET CLI는 일반적인 CI 공급자가 설정한 몇 가지 잘 알려진 환경 변수의 존재 및 값을 확인합니다.

다음 목록에서는 환경 변수와 .NET CLI에서 해당 값을 사용하는 방법을 보여 줍니다. .NET CLI는 환경 변수의 값을 수집하지 않습니다. 값만 사용하여 부울 플래그를 설정합니다.

변수(들) 공급자 행동
TF_BUILD Azure 파이프라인 부울 값 구문 분석
GITHUB_ACTIONS GitHub Actions (GitHub 액션) 부울 값 구문 분석
APPVEYOR Appveyor (앱 배포 툴) 부울 값 구문 분석
CI 다/대부분 부울 값 구문 분석
TRAVIS Travis CI 부울 값 구문 분석
CIRCLECI CircleCI 부울 값 구문 분석
CODEBUILD_BUILD_ID, AWS_REGION Amazon 웹 서비스 코드빌드 모두 존재하고 null이 아닌지 확인합니다.
BUILD_ID, BUILD_URL 젠킨스 모두 존재하고 null이 아닌지 확인합니다.
BUILD_ID, PROJECT_ID Google Cloud 빌드 모두 존재하고 null이 아닌지 확인합니다.
TEAMCITY_VERSION TeamCity 존재 여부와 null이 아닌지 확인
JB_SPACE_API_URL JetBrains 공간 존재 여부와 null이 아닌지 확인

LLM 탐지

.NET CLI가 LLM 에이전트의 컨텍스트에서 실행되고 있는지 감지하기 위해 .NET CLI는 LLM 에이전트 및 AI 코딩 도우미가 설정한 여러 환경 변수의 존재 및 값을 확인합니다.

다음 표에서는 에이전트 이름, 검색에 사용되는 환경 변수 및 보고된 에이전트 유형의 값을 보여 줍니다. 이러한 환경 변수의 실제 값은 수집되지 않으며 에이전트 유형을 식별하는 데만 사용됩니다.

LLM 에이전트 변수 가치
GitHub Copilot GITHUB_COPILOT_CLI_MODE 코파일럿
클로드 코드 CLAUDECODE "클로드"
Cursor CURSOR_EDITOR "커서"
Google Gemini GEMINI_CLI 제미니

.NET CLI가 여러 에이전트를 검색하는 경우 다른 에이전트 값을 쉼표와 연결하여 최종 값을 생성합니다.

참고