GitHub와 같은 코드 리포지토리, 소스 제어 또는 공유 코드베이스에서 공유 코드를 사용하는 경우 MSBuild를 사용하여 로컬 컴퓨터에서 빌드를 일시적으로 사용자 지정할 수 있습니다. 버그를 일시적으로 재현하거나 다른 구성을 테스트하고 이러한 사용자 지정을 공유 코드 리포지토리의 파일과 별도로 유지하는 것이 좋습니다. 이 문서에서는 사용자별 또는 로컬 전용 사용자 지정 빌드 구성을 만들 수 있는 MSBuild에서 사용할 수 있는 일부 빌드 확장에 대해 설명합니다.
필수 조건
- MSBuild를 사용하여 빌드하는 Visual Studio 프로젝트입니다.
사용자 파일 사용
이 컨텍스트에서 $(MSBuildProjectFullPath).user 파일이라고도 하는 이 파일을 사용하여 로컬 컴퓨터와 관련된 확장, 옵션 또는 변수를 저장할 수 있습니다. 사용자 파일은 소스 제어에 업로드하도록 설계되지 않았으며 .gitignore에서 자동으로 확인됩니다. 보다 광범위한 변경을 위해 프로젝트 자체를 변경하므로 향후 유지 관리자는 이 확장 메커니즘에 대해 알 필요가 없습니다.
지원되는 다중 대상 프로젝트에서 사용자 파일은 내부 빌드 및 외부 빌드에서 자동으로 가져오므로 솔루션 내에서 이 파일을 만들 수 있습니다. 다른 유형의 빌드에서 작업하는 경우 다음과 같이 솔루션 내에서 만든 다음 프로젝트 파일에서 가져와서 사용자 파일을 사용할 수 있습니다.
<Import Project="$(MSBuildProjectFullPath).user" Condition="Exists('$(MSBuildProjectFullPath).user')"/>
MSBuildExtensionsPath 및 MSBuildUserExtensionsPath 사용
규칙에 따라 많은 핵심 빌드 논리 파일은 $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\TargetFileName\ImportBefore\*.targets 해당 콘텐츠 앞에 파일을 가져오고 $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\TargetFileName\ImportAfter\*.targets 나중에 파일을 가져옵니다. 이 규칙을 사용하면 설치된 SDK가 공통 프로젝트 형식의 빌드 논리를 보강할 수 있습니다.
$(MSBuildUserExtensionsPath) 동일한 디렉터리 구조는 %LOCALAPPDATA%\Microsoft\MSBuild 사용자별 폴더에서 검색됩니다. 해당 폴더에 배치된 파일은 해당 사용자의 자격 증명으로 실행되는 해당 프로젝트 유형의 모든 빌드에 대해 가져옵니다.
가져오기 파일의 이름을 딴 속성을 패턴으로 설정하여 사용자 확장을 사용하지 않도록 설정할 수 있습니다 ImportUserLocationsByWildcardBefore\<ImportingFileNameWithNoDots>. 설정을 ImportUserLocationsByWildcardBeforeMicrosoftCommonProps으로 하여 false 가져오기를 방지합니다 $(MSBuildUserExtensionsPath\$(MSBuildToolsVersion)\Imports\Microsoft.Common.props\ImportBefore\*.
프로젝트 언어에 따라 사용자 지정 조건 만들기
.NET 언어(C#, Visual Basic 또는 F#)에 따라 다른 동작이 필요한 경우 프로젝트 파일 확장 <MSBuildProjectExtension> 명과 관련된 조건이 있는 속성 그룹을 추가하여 언어별 속성과 해당 값을 정의할 수 있습니다.
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.vbproj'">
<!-- Put VB-only property definitions here -->
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.fsproj'">
<!-- Put F#-only property definitions here -->
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.csproj'">
<!-- Put C#-only property definitions here -->
</PropertyGroup>