빌드 시스템 사용자 지정Customizing the build system

Microsoft Build Engine은 애플리케이션을 빌드하기 위한 플랫폼입니다.The Microsoft Build Engine is a platform for building applications. MSBuild라고도 하는 이 엔진은 Microsoft에서 개발되었으며 .NET 애플리케이션의 빌드에 사용됩니다.The engine, which is also known as MSBuild, was developed by Microsoft and allows for the building of .NET applications. Mono 프레임워크에는 xbuild라는 Microsoft 빌드 엔진의 자체 구현도 있습니다.The Mono framework also has its own implementation of Microsoft's Build Engine, called xbuild. 그러나 현재 xbuild는 단계적으로 사용이 중단되었으며, 모든 운영 체제에서 MSBuild가 사용됩니다.At this time, however, xbuild has been phased out in favor of using MSBuild on all operating systems.

MSBuild는 Mac용 Visual Studio에서 프로젝트의 빌드 시스템으로 사용되며 소스 파일 등의 입력 집합을 가져와 작업하고 실행 파일 등의 출력으로 변환합니다.MSBuild is used as the build system for projects in Visual Studio for Mac and works by taking a set of inputs, such as source files, and transforms them to outputs, such as executables. 컴파일러 등의 도구를 호출하면 이 출력을 얻을 수 있습니다.It achieves this output by invoking tools such as the compiler.

MSBuild 파일MSBuild file

MSBuild는 프로젝트 파일이라는 XML 파일을 사용합니다. 이 파일은 프로젝트의 일부인 항목(예: 이미지 리소스)과 프로젝트를 빌드하는 데 필요한 속성을 정의합니다.MSBuild uses an XML file, called a project file, that defines the Items that are part of your project (such as image resources), and the Properties required to build your project. 이 프로젝트 파일의 파일 확장명은 C# 프로젝트의 .csproj와 같이 항상 proj로 끝납니다.This project file will always have a file extension ending in proj, such as .csproj for C# projects.

MSBuild 파일 보기Viewing the MSBuild file

프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 찾기에 표시를 선택하여 MSBuild 파일을 찾습니다.Locate the MSBuild file by right-clicking on your project name and selecting Reveal in Finder. 찾기 창에는 다음 이미지와 같이 .csproj 파일을 비롯하여 프로젝트와 관련된 모든 파일과 폴더가 표시됩니다.The finder window displays all the files and folders related to your project, including the .csproj file, as illustrated in the following image:

Finder에서 csproj 위치

Mac용 Visual Studio의 새 탭에서 .csproj를 표시하려면 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 도구 > 파일 편집으로 이동합니다.To display the .csproj in a new tab in Visual Studio for Mac, right-click on your project name and browse to Tools > Edit File:

원본 편집기에서 csproj 열기

MSBuild 파일의 컴퍼지션Composition of the MSBuild file

모든 MSBuild 파일에는 다음과 같이 필수 루트 Project 요소가 포함되어 있습니다.All MSBuild files contain a mandatory root Project element, like so:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

일반적으로 프로젝트는 .targets 파일도 가져옵니다.Typically, the project will also import a .targets file. 이 파일에는 다양한 파일을 처리하고 빌드하는 방법을 설명하는 많은 규칙이 포함되어 있습니다.This file contains many of the rules that describe how to process and build the various files. 가져오기는 일반적으로 proj 파일의 아래쪽에 표시되며, C# 프로젝트의 경우 다음과 같이 표시됩니다.The import usually appear towards the bottom of your proj file, and for C# projects look something like this:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

대상 파일은 다른 MSBuild 파일입니다.The targets file is another MSBuild file. 이 파일에는 여러 프로젝트에서 다시 사용할 수 있는 MSBuild 코드가 들어 있습니다.This file contains MSBuild code that is reusable by multiple projects. 예를 들어 MSBuildBinPath 속성(또는 변수)이 나타내는 디렉터리의 Microsoft.CSharp.targets 파일에는 C# 소스 파일에서 C# 어셈블리를 빌드하기 위한 논리가 포함되어 있습니다.For example, the Microsoft.CSharp.targets file, which is found in a directory represented by the MSBuildBinPath property (or variable), contains the logic for building C# assemblies from C# source files.

항목 및 속성Items and properties

MSBuild에는 두 가지 기본적인 데이터 형식인 ‘항목’ 및 ‘속성’이 있습니다. 두 데이터 형식은 다음 섹션에서 자세히 설명합니다. There are two fundamental data types in MSBuild: items and properties, which are explained in more detail in the following sections.

속성Properties

속성은 키/값 쌍으로, 컴파일러 옵션 등 컴파일에 영향을 주는 설정을 저장하는 데 사용됩니다.Properties are key/value pairs, which are used to store settings that affect compilation, such as compiler options.

PropertyGroup을 사용하여 설정되며, 임의 개수의 속성을 포함하는 임의 개수의 PropertiesGroup을 포함할 수 있습니다.They are set using a PropertyGroup and can contain any number of PropertiesGroups, which can contain any number of properties.

예를 들어, 간단한 콘솔 애플리케이션의 PropertyGroup은 다음 XML과 같이 표시될 수 있습니다.For example, the PropertyGroup for a simple console application might look like the following XML:

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
    <ProjectGuid>{E248730E-1393-43CC-9183-FFA42F63BE81}</ProjectGuid>
    <OutputType>Exe</OutputType>
    <RootNamespace>refactoring</RootNamespace>
    <AssemblyName>refactoring</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>

$() 구문을 사용하여 식에서 속성을 참조할 수 있습니다.Properties can be referred to from expressions using the $() syntax. 예를 들어 $(Foo)Foo 속성의 값으로 평가됩니다.For example, $(Foo) will be evaluated as the value of the Foo property. 속성을 설정하지 않은 경우 오류 없이 빈 문자열로 평가됩니다.If the property has not been set, it will evaluate as an empty string, without any error.

ItemsItems

항목은 빌드 시스템에 대한 입력을 목록 또는 집합으로 처리하는 방법을 제공하며, 일반적으로 파일을 나타냅니다.Items provide a way of dealing with inputs into the build system as lists or sets, and typically represent files. 각 항목에는 항목 종류, 항목 사양, 선택적 임의 메타데이터가 있습니다.Each item has an item type, an item spec, and optional arbitrary metadata. MSBuild는 개별 항목에서 작동하지 않고, 항목 집합이라는 지정된 형식의 모든 항목을 사용합니다.Note that MSBuild doesn't operate on individual items, it takes on all the items of a given type-called an item set

ItemGroup을 선언하여 항목을 만듭니다.Items are created by declaring an ItemGroup. 임의 개수의 항목을 포함하는 임의 개수의 ItemGroup이 있을 수 있습니다.There can be any number of ItemGroups, which can contain any number of items.

예를 들어, 다음 코드 조각은 iOS 시작 화면을 만듭니다.For example, the following code snippet creates the iOS Launch Screens. 시작 화면에는 사양이 이미지 경로로 지정된 빌드 형식 BundleResource가 있습니다.The Launch Screens have the build type BundleResource, with the spec as the path to the image:

 <ItemGroup>
    <BundleResource Include="Resources\Default-568h%402x.png" />
    <BundleResource Include="Resources\Default%402x.png" />
    <BundleResource Include="Resources\Default.png" />
    <BundleResource Include="Resources\Default-Portrait.png" />
    <BundleResource Include="Resources\Default-Portrait%402x.png" />
    <BundleResource Include="Resources\Default-Landscape%402x.png" />
  </ItemGroup>

@() 구문을 사용하여 식에서 항목 집합을 참조할 수 있습니다.Item sets can be referred to from expressions using the @() syntax. 예를 들어 @(BundleResource)는 모든 BundleResource 항목을 의미하는 BundleResource 항목 집합으로 평가됩니다.For example, @(BundleResource) will be evaluated as the BundleResource item set, which means all of the BundleResource items. 이 형식의 항목이 없는 경우 오류 없이 비어 있습니다.If there are no items of this type, it will be empty, without any error.

MSBuild 학습용 리소스Resources for learning MSBuild

다음 리소스를 사용하여 MSBuild에 대해 자세히 알아볼 수 있습니다.The following resources can be used to learn about MSBuild in more detail: