MSBuild 속성
속성은 빌드를 구성하는 데 사용될 수 있는 이름-값 쌍입니다. 속성을 사용하여 값을 작업으로 전달하고, 조건을 확인하며, 프로젝트 파일 전체에서 참조할 수 있도록 값을 저장할 수 있습니다.
프로젝트 파일에서 속성 정의 및 참조
속성 이름을 갖는 요소를 PropertyGroup 요소의 자식으로 만들어 속성을 선언합니다. 예를 들어, 다음 XML은 값이 Build인 BuildDir이라는 속성을 만듭니다.
<PropertyGroup>
<BuildDir>Build</BuildDir>
</PropertyGroup>
프로젝트 파일 전체에서 $(PropertyName) 구문을 사용하여 속성을 참조합니다. 예를 들어, 이전 예제의 속성은 $(BuildDir)로 참조됩니다.
속성을 다시 정의하여 속성 값을 변경할 수 있습니다. 다음 XML을 사용하면 BuildDir 속성에 새 값을 지정할 수 있습니다.
<PropertyGroup>
<BuildDir>Alternate</BuildDir>
</PropertyGroup>
속성은 프로젝트 파일에 표시되는 순서대로 실행됩니다. BuildDir의 새 값은 이전 값을 할당한 후 선언해야 합니다.
예약 속성
MSBuild는 몇 개의 속성 이름을 예약하여 프로젝트 파일과 MSBuild 이진 파일에 대한 정보를 저장합니다. 이러한 속성은 다른 속성과 같이 $ 표기법으로 참조됩니다. 예를 들어, $(MSBuildProjectFile)은 파일 확장명을 포함하는 프로젝트 파일의 전체 파일 이름을 반환합니다.
자세한 내용은 방법: 프로젝트 파일의 이름 또는 위치 참조 및 MSBuild의 예약된 속성 및 잘 알려진 속성를 참조하십시오.
환경 속성
프로젝트 파일에서 환경 변수도 예약 속성과 같은 방식으로 참조할 수 있습니다. 예를 들어, 프로젝트 파일에서 PATH 환경 변수를 사용하려면 $(Path)를 사용합니다. 프로젝트에 환경 속성과 이름이 같은 속성이 정의되어 있으면 프로젝트의 속성이 환경 변수의 값을 재정의합니다.
각 MSBuild 프로젝트에는 격리된 환경 블록을 가지고 있습니다. 오직 읽거나 자체 블록에 기록만 합니다. MSBuild는 프로젝트 파일을 평가하거나 구축하기 전에 속성 컬렉션을 초기화하는 경우에만 환경 변수를 읽습니다. 그 후 환경 속성은 고정됩니다. 즉, 같은 이름과 값을 사용하여 생성된 각 도구로 시작합니다.
생성된 도구 내에서 환경 변수의 현재 값을 얻으려면, 속성 함수 System.Environment.GetEnvironmentVariable 을 사용합니다. 그러나 작업 매개 변수 EnvironmentVariables를 사용하는 메소드가 좋습니다. 이 문자열 배열에 있는 환경 설정은 시스템 환경 변수를 영향을 주지 않고 생성된 도구에 전달할 수 있습니다.
팁
모든 환경 변수를 초기 속성을 읽습니다.모든 환경 변수는 "386"같이 유효한 MSBuild 속성 이름이 아닌 이름은 무시 됩니다.
자세한 내용은 방법: 빌드 시 환경 변수 사용을 참조하십시오.
레지스트리 속성
다음 구문을 사용하여 시스템 레지스트리 값을 읽을 수 있습니다. 여기서 Hive는 레지스트리 하이브(예: HKEY_LOCAL_MACHINE)이고, Key는 키 이름, SubKey는 하위 키 이름, Value는 하위 키 값입니다.
$(registry:Hive\MyKey\MySubKey@Value)
기본 하위 키 값을 가져오려면 Value를 생략합니다.
$(registry:Hive\MyKey\MySubKey)
이 레지스트리 값을 사용하여 빌드 속성을 초기화할 수 있습니다. 예를 들어, Visual Studio 웹 브라우저 홈 페이지를 나타내는 빌드 속성을 만들려면 다음 코드를 사용합니다.
<PropertyGroup>
<VisualStudioWebBrowserHomePage>
$(registry:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\WebBrowser@HomePage)
</VisualStudioWebBrowserHomePage>
<PropertyGroup>
전역 속성
MSBuild는 /property (또는 /p) 스위치를 통해 명령줄에서 속성을 설정할 수 있습니다. 이러한 전역 속성 값은 프로젝트 파일에 설정된 속성 값을 재정의합니다. 환경 속성도 여기에 포함되지만, 변경할 수 없는 예약 속성은 포함되지 않습니다.
다음 예제에서는 전역 Configuration 속성을 DEBUG로 설정합니다.
msbuild.exe MyProj.proj /p:Configuration=DEBUG
MSBuild 작업의 Properties 특성을 사용하면 다중 프로젝트 빌드의 자식 프로젝트에 대해 전역 속성을 설정하거나 수정할 수도 있습니다. 자세한 내용은 MSBuild 작업을 참조하십시오.
프로젝트 태그에 TreatAsLocalProperty 특성을 사용하여 속성을 지정할 경우, 전역 속성 값은 프로젝트 파일에 설정 된 속성 값에 오버라이딩하지 않습니다. 자세한 내용은 Project 요소(MSBuild) 및 방법: 동일한 소스 파일을 다른 옵션을 사용하여 빌드를 참조하십시오.
속성 함수
.NET Framework 버전 4을 시작하면, 속성 함수를 사용하여 MSBuild 스크립트를 실행할 수 있습니다. MSBuild 작업을 사용하지 않고도 빌드 스크립트 내에서 시스템 시간을 읽고 문자열을 비교하고 정규식을 일치시키고 다른 많은 작업을 수행할 수 있습니다.
문자열(인스턴스) 메서드를 사용하여 임의의 속성 값에 대한 작업을 수행하고 여러 시스템 클래스의 정적 메서드를 호출할 수 있습니다. 예를 들어, 다음과 같은 방법으로 빌드 속성을 오늘 날짜로 설정할 수 있습니다.
<Today>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</Today>
자세한 내용과 속성 함수의 목록은 속성 함수를 참조하십시오.
실행 중에 속성 만들기
Target 요소 외부에 배치된 속성의 값은 빌드 실행 단계 중에 할당됩니다. 이후 실행 단계에서 다음과 같이 속성을 만들거나 수정할 수 있습니다.
임의의 작업에서 속성을 내보낼 수 있습니다. 속성을 내보내려면 Task 요소에 PropertyName 특성을 가진 자식 Output 요소가 있어야 합니다.
CreateProperty 작업에서 속성을 내보낼 수 있습니다. 이 사용법은 사용되지 않습니다.
.NET Framework 3.5부터는 속성 선언이 있을 수 있는 PropertyGroup 요소를 Target 요소에 포함할 수 있습니다.
속성에 XML 저장
값을 작업으로 전달하거나 로깅 정보를 표시하는 데 도움이 될 수 있는 임의의 XML을 속성에 포함할 수 있습니다. 다음 예제에서는 XML 및 기타 속성 참조가 포함된 값을 가진 ConfigTemplate 속성을 보여 줍니다. MSBuild에서는 해당하는 각각의 속성 값을 사용하여 속성 참조를 바꿉니다. 속성 값은 표시되는 순서대로 할당됩니다. 따라서 이 예제에서 $(MySupportedVersion), $(MyRequiredVersion) 및 $(MySafeMode)는 이미 정의되어 있어야 합니다.
<PropertyGroup>
<ConfigTemplate>
<Configuration>
<Startup>
<SupportedRuntime
ImageVersion="$(MySupportedVersion)"
Version="$(MySupportedVersion)"/>
<RequiredRuntime
ImageVersion="$(MyRequiredVersion)
Version="$(MyRequiredVersion)"
SafeMode="$(MySafeMode)"/>
</Startup>
</Configuration>
</ConfigTemplate>
</PropertyGroup>