MSBuild는 사용자 지정이 가능하고 확장 가능하므로(자세한 내용은 빌드 사용자 지정 참조) 환경 및 빌드의 적절한 구성에 대해 특별한 주의를 기울여야 합니다.
설치 위치에 대한 쓰기 액세스 제한
신뢰할 수 있는 사용자만 쓰기 권한이 있는 위치에 MSBuild(Visual Studio, .NET SDK 또는 독립 실행형)를 설치합니다.
MSBuild 실행 파일 옆에 배치된 다양한 이진 파일과 XML 파일을 변경하거나 MSBuild 실행 파일의 하위 폴더에 추가하여 빌드 논리를 변경할 수 있습니다. 따라서 신뢰할 수 있는 사용자만 폴더에 쓸 수 있어야 합니다.
관련 구성
-
MSBuildExtensionsPath 및 MSBuildUserExtensionsPath - 특히
ImportUserLocationsByWildcardBefore{ImportingFileNameWithNoDots}확장 논리를 옵트아웃하는 데 사용할 수 있는 속성
알고 검토한 원본에서만 빌드 실행
완전히 신뢰할 수 있는 원본에서만 MSBuild를 실행합니다(프로젝트 빌드 및 복원뿐만 아니라 Visual Studio에서 프로젝트 열기용).
프로젝트 파일을 포함하여 빌드 스크립트 파일 내에서 MSBuild 논리를 확장할 수 있으므로 알 수 없는 빌드 논리는 빌드 환경에서 임의의 코드를 실행할 수 있다고 가정해야 합니다.
관련 구성
확인된 전용 위치에서 빌드 실행
MSBuild는 프로젝트 또는 솔루션의 폴더와 드라이브의 루트까지 부모 폴더의 논리를 자동으로 포함할 수 있습니다. 여기에는 .user 파일, [before|after].{solution}.targets 파일, Directory.Build.[props|targets|rsp] 파일 등이 포함됩니다.
권한 있는 사용자 또는 계정만 빌드 관련 파일이 포함된 위치와 드라이브의 루트 폴더까지의 계층 구조 내 모든 폴더에 쓰기 액세스 권한이 있는지 확인하십시오.
의도하지 않은 포함 Directory.Build.[props|targets|rsp]을 방지하려면 이러한 파일을 원본의 루트에 포함할 수 있습니다. 파일은 빈 MSBuild Project 요소일 수 있습니다.
관련 구성
참조된 패키지 및 원래 피드 파악 및 검토
빌드 논리는 NuGet 패키지에 의해 자동으로 확장될 수 있습니다. 이러한 논리는 복원 시 실행되며, 여기에는 빌드 또는 컴파일 실행에 대한 논리가 포함됩니다. 빌드, 컴파일 및 런타임 중에 NuGet 패키지 자산 형식 및 해당 역할에 대해 잘 알고 있는지 확인합니다. 특히 build, buildTransitivebuildMultitargeting 및 analyzers 자산은 명시적으로 옵트아웃되지 않는 한 빌드에 자동으로 연결되고 자동으로 실행됩니다.
참조된 패키지의 빌드 또는 컴파일러 확장 논리가 필요하지 않을 때마다 사용합니다 ExcludeAssets (또는 원하는 경우에만 명시적으로 IncludeAssets 빌드 논리를 사용하는 것이 좋습니다).
NuGet 팀의 현재 설명서 및 지침에 대해 잘 알고 있는지 확인합니다. 이 문제에 대한 신뢰할 수 있는 원본으로 프로젝트 파일 내 문서를 참조하세요.PackageReference
관련 구성
빌드 시작 스크립트/프로세스 파악 및 검토
빌드 논리는 명령줄 인수 또는 환경 변수, 특히 플러그 인(예: 사용자 지정 로거) 또는 빌드 논리(예: 빌드 스크립트)를 삽입할 수 있는 MSBuildUserExtensionsPath변수의 영향을 받을 수 있습니다. MSBuild 프로세스에 적용되는 명령줄 인수 및 환경 변수를 알고 있는지 확인합니다. 이렇게 하면 빌드 논리의 영향을 더 잘 이해할 수 있습니다.
전용 사용자 계정 및 세션을 사용하여 빌드 실행
다른 빌드를 포함하여 이전에 알 수 없는 프로세스 또는 스크립트를 실행하는 데 동일한 시스템에서 사용할 수 있는 계정으로 실행하지 마세요. 특히 동일한 사용자 계정의 관련 없는 빌드가 완전히 신뢰할 수 있고 알려지지 않은 원본에서 실행되었을 수 있습니다.
MSBuild는 사용자 프로필(특히 MSBuild SDK에는 MSBuildUserExtensionsPath 위치에 있는 빌드 논리가 자동으로 포함됨) 또는 환경 변수에 의해 삽입할 수 있는 위치에서 다양한 위치에서 논리를 소스로 만들 수 있습니다(동일한 이름의 MSBuild 속성으로 사용자 지정할 MSBuildUserExtensionsPath 수 있음). 이러한 속성에는 기본값이 없으므로 동일한 이름의 환경 변수에서 원본으로 사용할 수 있습니다.)
관련 구성
-
MSBuildExtensionsPath 및 MSBuildUserExtensionsPath: 특정 확장 빌드 논리의 자동 포함을 제외시키려면
false속성을ImportUserLocationsByWildcardBefore{ImportingFileNameWithNoDots}에 설정할 수 있습니다.