.NET SDK 및 .NET CLI 원격 분석

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

수집된 데이터는 Creative Commons Attribution 라이선스에 따라 모두 집계하여 게시됩니다. 수집된 데이터 중 일부는 .NET CLI 원격 분석 데이터에 게시됩니다.

범위

dotnet에는 두 가지 기능이 있습니다. 앱을 실행하고 CLI 명령을 실행합니다. dotnet을 사용하여 다음 형식으로 애플리케이션을 시작하는 경우 원격 분석이 ‘수집되지 않습니다’.

  • dotnet [path-to-app].dll

다음과 같은 .NET CLI 명령을 사용하는 경우 원격 분석이 ‘수집됩니다’.

  • dotnet build
  • dotnet pack
  • dotnet run

옵트아웃(opt out)하는 방법

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

설치에 성공하면 .NET SDK 설치 관리자에서 단일 원격 분석 항목도 보냅니다. 옵트아웃하려면 .NET SDK를 설치하기 전에 DOTNET_CLI_TELEMETRY_OPTOUT 환경 변수를 설정합니다.

Important

설치 관리자를 시작한 후 옵트아웃하려면: 설치 관리자를 닫고 환경 변수를 설정한 후 해당 값을 설정한 상태로 설치 관리자를 다시 실행합니다.

공개

.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_NOLOGO 환경 변수를 true로 설정합니다. 이 변수는 원격 분석 옵트아웃에는 영향을 주지 않습니다.

데이터 요소

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

개인 정보 보호는 Microsoft에 중요합니다. 원격 분석이 중요한 데이터를 수집하고 있는지 또는 데이터가 안전하지 않거나 부적절한 방식으로 처리되고 있는지 의심스러운 경우 조사를 위해 dotnet/sdk 리포지토리에서 문제를 제출하거나 dotnet@microsoft.com에 전자 메일을 보내세요.

원격 분석 기능은 다음 데이터를 수집합니다.

SDK 버전 데이터
모두 호출의 타임스탬프
모두 2.1부터 해시된 호출된 명령(예: “build”)
모두 지리적 위치를 확인하는 데 사용되는 8진수 IP 주소 3개
모두 운영 체제 및 버전
모두 SDK가 실행되고 있는 RID(런타임 ID)
모두 .NET SDK 버전입니다.
모두 원격 분석 프로필: 명시적 사용자 옵트인과 함께 사용되고 Microsoft에서 내부적으로만 사용되는 선택적 값
>=2.0 명령 인수 및 옵션: 알려진 인수 및 옵션만 수집됩니다(임의 문자열이 아님). 수집된 옵션을 참조하세요. 2.1.300 이후에 해시됩니다.
>=2.0 SDK가 컨테이너에서 실행 중인지 여부.
>=2.0 2.1부터 해시된 TargetFramework 이벤트의 대상 프레임워크
>=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 빌드에 사용되는 해시된 TargetFrameworkVersion(MSBuild 속성)
>=5.0.100 빌드에 사용되는 해시된 RuntimeIdentifier(MSBuild 속성)
>=5.0.100 빌드에 사용되는 해시된 SelfContained(MSBuild 속성)
>=5.0.100 빌드에 사용되는 해시된 UseApphost(MSBuild 속성)
>=5.0.100 빌드에 사용되는 해시된 OutputType(MSBuild 속성)
>=5.0.201 빌드에 사용되는 해시된 PublishReadyToRun(MSBuild 속성)
>=5.0.201 빌드에 사용되는 해시된 PublishTrimmed(MSBuild 속성)
>=5.0.201 빌드에 사용되는 해시된 PublishSingleFile(MSBuild 속성)
>=5.0.202 프로세스 시작에서 CLI 프로그램의 main 메서드에 들어갈 때까지 경과된 시간이며 호스트 및 런타임 시작을 측정합니다.
>=5.0.202 처음 실행 시 .NET 도구를 경로에 추가하는 단계에 경과된 시간입니다.
>=5.0.202 처음 실행 시 처음 사용 알림을 표시하는 데 경과된 시간입니다.
>=5.0.202 처음 실행 시 ASP.NET 인증서를 생성하는 데 경과된 시간입니다.
>=5.0.202 CLI 입력을 구문 분석하는 데 경과된 시간입니다.
>=6.0.100 OS 아키텍처
>=6.0.104 빌드에 사용되는 해시된 PublishReadyToRunUseCrossgen2(MSBuild 속성)
>=6.0.104 빌드에 사용되는 해시된 Crossgen2PackVersion(MSBuild 속성)
>=6.0.104 빌드에 사용되는 해시된 CompileListCount(MSBuild 속성)
>=6.0.104 빌드에 사용되는 해시된 _ReadyToRunCompilationFailures(MSBuild 속성)
>=6.0.300 CLI가 연속 통합 환경에서 호출된 경우 자세한 내용은 연속 통합 검색을 참조하세요.
>=7.0.100 빌드에 사용되는 해시된 PublishAot(MSBuild 속성)
>=7.0.100 빌드에 사용되는 해시된 PublishProtocol(MSBuild 속성)

수집된 옵션

특정 명령은 추가 데이터를 보냅니다. 명령의 하위 집합은 첫 번째 인수를 보냅니다.

명령 전송된 첫 번째 인수 데이터
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

--verbosity--sdk-package-version을 제외하면 다른 모든 값은 .NET Core 2.1.100 SDK부터 해시됩니다.

템플릿 엔진 원격 분석

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

  • --framework
  • --auth

크래시 예외 원격 분석

.NET CLI/SDK에서 크래시가 발생하면 CLI/SDK 코드의 예외 및 스택 추적 이름을 수집합니다. 이 정보는 문제를 평가하고 .NET SDK 및 CLI의 품질을 향상하기 위해 수집됩니다. 이 문서에서는 수집하는 데이터에 대한 정보를 제공합니다. 고유한 .NET SDK 버전을 빌드하는 사용자가 실수로 개인 정보나 중요한 정보를 공개하지 않도록 하는 방법에 대한 팁도 제공합니다.

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

환경 변수의 전체 목록과 해당 값으로 수행되는 작업은 다음과 같습니다. 모든 경우에 환경 변수의 값은 수집되지 않습니다. 부울 플래그를 설정하는 데만 사용됩니다.

변수(들) 공급자 작업
TF_BUILD Azure Pipelines 부울 값 구문 분석
GITHUB_ACTIONS GitHub Actions 부울 값 구문 분석
APPVEYOR Appveyor 부울 값 구문 분석
CI 다수/대부분 부울 값 구문 분석
TRAVIS Travis CI 부울 값 구문 분석
CIRCLECI Circle CI 부울 값 구문 분석
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services 코드빌드 모두 존재하고 null이 아닌지 확인합니다.
BUILD_ID, BUILD_URL Jenkins 모두 존재하고 null이 아닌지 확인합니다.
BUILD_ID, PROJECT_ID Google 클라우드 빌드 모두 존재하고 null이 아닌지 확인합니다.
TEAMCITY_VERSION TeamCity 현재 및 null이 아닌지 확인
JB_SPACE_API_URL JetBrains 공간 현재 및 null이 아닌지 확인

의도하지 않은 정보 공개 방지

.NET 기여자 및 자체적으로 빌드한 .NET SDK 버전을 실행하는 다른 모든 사용자는 SDK 소스 코드의 경로를 고려해야 합니다. 사용자 지정 디버그 빌드이거나 사용자 지정 빌드 기호 파일로 구성된 .NET SDK를 사용하는 동안 크래시가 발생하면 빌드 머신의 SDK 소스 파일 경로는 스택 추적의 일부로 수집되며 해시되지 않습니다.

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

참고 항목