영어로 읽기

다음을 통해 공유


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

데이터 포인트

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

개인 정보 보호는 Microsoft에 중요합니다. 원격 분석이 민감한 데이터를 수집하거나 데이터가 안전하지 않게 또는 부적절하게 처리된다고 의심되는 경우, dotnet/sdk 리포지토리에 이슈를 제기하거나 조사를 위해 dotnet@microsoft.com로 이메일을 보내십시오.

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

SDK 버전 데이터
모두 호출 타임스탬프입니다.
모두 호출된 명령(예: "build")은 2.1부터 해시됩니다.
모두 지리적 위치를 결정하는 데 사용되는 3개의 8진수 IP 주소입니다.
모두 운영 체제 및 버전.
모두 SDK가 실행 중인 RID(런타임 ID)입니다.
모두 .NET SDK 버전입니다.
모두 원격 분석 프로필: 명시적으로 사용자가 옵트인한 경우에만 사용되며 Microsoft에서 내부적으로 사용되는 선택적 값입니다.
>=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 빌드에 사용되는 해시된 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 프로그램의 주 메서드를 입력하여 호스트 및 런타임 시작을 측정하는 때까지 경과된 시간입니다.
>=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 속성)
>=8.0.100 빌드에 사용되는 해시된 TargetPlatformIdentifier(MSBuild 속성)
>=8.0.100 빌드에 사용된 Hashed HybridGlobalization(MSBuild 속성)
>=8.0.100 .NET Blazor WebAssembly SDK가 사용되는지 여부입니다.
>=8.0.100 .NET WebAssembly SDK가 사용되는지 여부입니다.
>=8.0.100 .NET MAUI 사용 여부입니다.
>=8.0.100 .NET 모바일 SDK가 사용되는지 여부입니다.
>=8.0.100 다른 모바일 SDK가 사용되는지 여부(예: Avalonia, Uno).
>=8.0.100 Mono AOT 사용 여부입니다.
>=8.0.100 Mono AOT 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제외하고 다른 모든 값은 .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 파이프라인 부울 값 구문 분석
GITHUB_ACTIONS GitHub Actions 부울 값 파싱
APPVEYOR Appveyor 부울 값 구문 분석
CI 다/대부분 불리언 값 구문 분석
트래비스 Travis CI 부울 값 구문 분석
CIRCLECI CircleCI 부울 값 구문 분석
CODEBUILD_BUILD_ID, AWS_REGION Amazon Web Services CodeBuild 모두 존재하고 null이 아닌지 확인합니다.
No changes needed. The translation as given is already optimal: BUILD_ID, BUILD_URL 젠킨스 모두 존재하고 null이 아닌지 확인합니다.
BUILD_ID (빌드 ID), PROJECT_ID (프로젝트 ID) Google Cloud 빌드 모두 존재하고 null이 아닌지 확인합니다.
TEAMCITY_VERSION TeamCity 존재 여부와 null이 아닌지 확인
JB_SPACE_API_URL JetBrains Space 값이 존재하고 null이 아닌지 확인

실수로 정보가 노출되는 것을 방지합니다.

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

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

참고