MSBuild 작업MSBuild Task

다른 MSBuildMSBuild 프로젝트에서 MSBuildMSBuild 프로젝트를 빌드합니다.Builds MSBuildMSBuild projects from another MSBuildMSBuild project.

매개 변수Parameters

다음 표에서는 MSBuild 작업의 매개 변수에 대해 설명합니다.The following table describes the parameters of the MSBuild task.

매개 변수Parameter 설명Description
BuildInParallel 선택적 Boolean 매개 변수입니다.Optional Boolean parameter.

true인 경우 Projects 매개 변수에 지정된 프로젝트가 가능한 경우 병렬로 빌드됩니다.If true, the projects specified in the Projects parameter are built in parallel if it is possible. 기본값은 false입니다.Default is false.
Projects 필수 ITaskItem[] 매개 변수입니다.Required ITaskItem[] parameter.

빌드할 프로젝트 파일을 지정합니다.Specifies the project files to build.
Properties 선택적 String 매개 변수입니다.Optional String parameter.

자식 프로젝트에 전역 속성으로 적용할 속성 이름/값 쌍의 세미콜론으로 구분된 목록입니다.A semicolon-delimited list of property name/value pairs to apply as global properties to the child project. 이 매개 변수는 지정하는 경우 MSBuild.exe를 사용하여 빌드할 때 /property 스위치가 포함된 속성을 설정하는 것과 동일한 기능을 제공합니다.When you specify this parameter, it is functionally equivalent to setting properties that have the /property switch when you build with MSBuild.exe. 예:For example:

Properties="Configuration=Debug;Optimize=$(Optimize)"

Properties 매개 변수를 통해 프로젝트에 속성을 전달하면 MSBuildMSBuild에서는 프로젝트 파일이 이미 로드되었더라도 프로젝트의 새 인스턴스를 만듭니다.When you pass properties to the project through the Properties parameter, MSBuildMSBuild creates a new instance of the project even if the project file has already been loaded. 프로젝트의 새 인스턴스가 만들어지면 MSBuildMSBuild는 해당 인스턴스를 프로젝트의 다른 인스턴스와 병렬로 빌드할 수 있으며 다른 전역 속성이 포함된 다른 프로젝트로 처리합니다.When a new instance of the project has been created, MSBuildMSBuild treats it as a different project that has different global properties and that can be built in parallel with other instances of the project. 예를 들어 릴리스 구성을 디버그 구성과 동시에 빌드할 수 있습니다.For example, a Release configuration could build at the same time as a Debug configuration.
RebaseOutputs 선택적 Boolean 매개 변수입니다.Optional Boolean parameter.

true인 경우 빌드한 프로젝트의 대상 출력 항목 상대 경로가 호출 프로젝트를 기준으로 조정됩니다.If true, the relative paths of target output items from the built projects have their paths adjusted to be relative to the calling project. 기본값은 false입니다.Default is false.
RemoveProperties 선택적 String 매개 변수입니다.Optional String parameter.

제거할 전역 속성의 집합을 지정합니다.Specifies the set of global properties to remove.
RunEachTargetSeparately 선택적 Boolean 매개 변수입니다.Optional Boolean parameter.

true인 경우 MSBuildMSBuild 작업이 MSBuildMSBuild에 전달된 목록의 각 대상을 동시에 호출하는 대신 한 번에 하나씩 호출합니다.If true, the MSBuildMSBuild task invokes each target in the list passed to MSBuildMSBuild one at a time, instead of at the same time. 이 매개 변수를 true로 설정하면 이전에 호출된 대상에 오류가 발생하더라도 후속 대상이 호출됩니다.Setting this parameter to true guarantees that subsequent targets are invoked even if previously invoked targets failed. 그렇지 않은 경우에는 빌드 오류로 인해 모든 후속 대상의 호출이 중지됩니다.Otherwise, a build error would stop invocation of all subsequent targets. 기본값은 false입니다.Default is false.
SkipNonexistentProjects 선택적 Boolean 매개 변수입니다.Optional Boolean parameter.

true인 경우 디스크에 없는 프로젝트 파일을 건너뜁니다.If true, project files that do not exist on the disk will be skipped. 그렇지 않은 경우 이러한 프로젝트로 인해 오류가 발생합니다.Otherwise, such projects will cause an error.
StopOnFirstFailure 선택적 Boolean 매개 변수입니다.Optional Boolean parameter.

true인 경우 프로젝트 중 하나를 빌드하지 못하면 더 이상 프로젝트를 빌드하지 않습니다.If true, when one of the projects fails to build, no more projects will be built. 현재 여러 프로세서를 사용하여 병렬로 빌드할 때는 이 매개 변수가 지원되지 않습니다.Currently this is not supported when building in parallel (with multiple processors).
TargetAndPropertyListSeparators 선택적 String[] 매개 변수입니다.Optional String[] parameter.

대상 및 속성의 목록을 Project 항목 메타데이터로 지정합니다.Specifies a list of targets and properties as Project item metadata). 처리 전에 구분 기호를 이스케이프 해제합니다.Separators will be un-escaped before processing. 예를 들어 %3B(이스케이프된 ';')는 이스케이프 해제된 ';'로 처리됩니다.e.g. %3B (an escaped ';') will be treated as if it were an un-escaped ';'.
TargetOutputs 선택적 읽기 전용 ITaskItem[] 출력 매개 변수입니다.Optional ITaskItem[] read-only output parameter.

모든 프로젝트 파일에서 작성된 대상의 출력을 반환합니다.Returns the outputs of the built targets from all the project files. 해당 대상이 종속된 대상에 있을 수 있는 출력이 아닌, 지정된 대상의 출력만 반환됩니다.Only the outputs from the targets that were specified are returned, not any outputs that may exist on targets that those targets depend on.

TargetOutputs 매개 변수는 다음 메타데이터도 포함합니다.The TargetOutputs parameter also contains the following metadata:

- MSBuildSourceProjectFile: 출력을 설정하는 대상이 포함된 MSBuildMSBuild 프로젝트 파일입니다.- MSBuildSourceProjectFile: The MSBuildMSBuild project file that contains the target that set the outputs.
- MSBuildSourceTargetName: 출력을 설정하는 대상입니다.- MSBuildSourceTargetName: The target that set the outputs. 참고: 각 프로젝트 파일이나 대상의 출력을 개별적으로 식별하려는 경우 각 프로젝트 파일 또는 대상에 대해 MSBuild를 개별적으로 실행합니다.Note: If you want to identify the outputs from each project file or target separately, run the MSBuild task separately for each project file or target. MSBuild 작업을 한 번만 실행하여 모든 프로젝트 파일을 빌드하는 경우에는 모든 대상의 출력이 배열 하나에 수집됩니다.If you run the MSBuild task only once to build all the project files, the outputs of all the targets are collected into one array.
Targets 선택적 String 매개 변수입니다.Optional String parameter.

프로젝트 파일에서 빌드할 하나 이상의 대상을 지정합니다.Specifies the target or targets to build in the project files. 세미콜론을 사용하여 대상 이름 목록을 구분합니다.Use a semicolon to separate a list of target names. MSBuild 작업에 대상이 지정되어 있지 않으면 프로젝트 파일에 지정된 기본 대상이 빌드됩니다.If no targets are specified in the MSBuild task, the default targets specified in the project files are built. 참고: 모든 프로젝트 파일에는 대상이 있어야 합니다.Note: The targets must occur in all the project files. 대상이 없으면 빌드 오류가 발생합니다.If they do not, a build error occurs.
ToolsVersion 선택적 String 매개 변수입니다.Optional String parameter.

이 작업에 전달된 프로젝트를 빌드할 때 사용할 ToolsVersion을 지정합니다.Specifies the ToolsVersion to use when building projects passed to this task.

MSBuildMSBuild 작업이 프로젝트에 지정된 것과 다른 .NET Framework.NET Framework 버전을 대상으로 하는 프로젝트를 빌드할 수 있도록 설정합니다.Enables an MSBuildMSBuild task to build a project that targets a different version of the .NET Framework.NET Framework than the one specified in the project. 유효한 값은 2.0, 3.03.5입니다.Valid values are 2.0, 3.0 and 3.5. 기본값은 3.5입니다.Default value is 3.5.
UnloadProjectsOnCompletion 선택적 Boolean 매개 변수입니다.Optional Boolean parameter.

true인 경우 작업이 완료되면 프로젝트가 언로드됩니다.If true, the project will be unloaded once the operation is complete.
UseResultsCache 선택적 Boolean 매개 변수입니다.Optional Boolean parameter.

true인 경우 캐시된 결과(있는 경우)가 반환됩니다.If true, the cached result will be returned, if present. MSBuild 작업이 실행되면 해당 결과는 (ProjectFileName, GlobalProperties)[TargetNames] 범위에If theMSBuild task is run, its result will be cached in a scope (ProjectFileName, GlobalProperties)[TargetNames]

빌드 항목의 목록으로 캐시됩니다.as a list of build items

설명Remarks

이 작업은 위에 나와 있는 매개 변수 외에 Task 클래스에서 직접 상속하는 TaskExtension 클래스의 매개 변수도 상속합니다.In addition to the parameters listed above, this task inherits parameters from the TaskExtension class, which itself inherits from the Task class. 이러한 추가 매개 변수 및 해당 설명이 포함된 목록은 TaskExtension Base Class를 참조하세요.For a list of these additional parameters and their descriptions, see TaskExtension Base Class.

Exec Task를 사용하여 MSBuild.exe를 시작하는 경우와 달리 이 작업에서는 동일한 MSBuildMSBuild 프로세스를 사용하여 자식 개체를 빌드합니다.Unlike using the Exec Task to start MSBuild.exe, this task uses the same MSBuildMSBuild process to build the child projects. 건너뛸 수 있는 이미 빌드된 대상의 목록은 부모 빌드와 자식 빌드 간에 공유됩니다.The list of already-built targets that can be skipped is shared between the parent and child builds. 또한 새 MSBuildMSBuild 프로세스가 만들어지지 않으므로 이 작업은 속도도 더 빠릅니다.This task is also faster because no new MSBuildMSBuild process is created.

이 작업에서는 프로젝트 파일뿐 아니라 솔루션 파일도 처리할 수 있습니다.This task can process not only project files but also solution files.

MSBuildMSBuild에서 여러 프로젝트를 동시에 빌드하는 데 필요한 모든 구성(해당 구성이 포트, 프로토콜, 시간 제한, 다시 시도 등의 원격 인프라를 사용하는 경우도 포함됨)은 구성 파일을 통해 구성 가능하도록 지정해야 합니다.Any configuration that is required by MSBuildMSBuild to enable projects to build at the same time, even if the configuration involves remote infrastructure (for example, ports, protocols, timeouts, retries, and so forth), must be made configurable by using a configuration file. 가능한 경우에는 MSBuild 작업에 대한 작업 매개 변수로 구성 항목을 지정할 수 있어야 합니다.When possible, configuration items should be able to be specified as task parameters on the MSBuild task.

MSBuildMSBuild 3.5부터는 솔루션 프로젝트가 이제 빌드하는 모든 하위 프로젝트에서 TargetOutputs를 표시합니다.Beginning in MSBuildMSBuild 3.5, Solution projects now surface TargetOutputs from all of the sub-projects it builds.

프로젝트에 속성 전달Passing Properties to Projects

MSBuildMSBuild 3.5 이전 MSBuildMSBuild 버전에서는 MSBuildMSBuild 항목에 나열된 각 프로젝트에 서로 다른 속성 집합을 전달하기가 어려웠습니다.In versions of MSBuildMSBuild prior to MSBuildMSBuild 3.5, passing different sets of properties to different projects listed in the MSBuildMSBuild item was challenging. MSBuild 작업의 Properties 특성을 사용한 경우에는 MSBuild 작업을 일괄 처리하고 항목 목록의 각 프로젝트에 대해 각기 다른 속성을 조건부로 제공한 경우가 아니면 빌드 중인 모든 프로젝트에 해당 설정이 적용되었습니다.If you used the Properties attribute of the MSBuild Task, then its setting was applied to all of the projects being built unless you batched the MSBuild Task and conditionally provided different properties for each project in the item list.

그러나 MSBuildMSBuild 3.5에서는 두 가지 새 예약된 메타데이터 항목인 Properties와 AdditionalProperties가 제공됩니다. 이러한 항목을 사용하면 MSBuild 작업을 통해 빌드 중인 각 프로젝트에 대해 서로 다른 속성을 유동적으로 전달할 수 있습니다.MSBuildMSBuild 3.5, however, provides two new reserved metadata items, Properties and AdditionalProperties, that provide you a flexible way to pass different properties for different projects being built using the MSBuild Task.

참고

이러한 새 메타데이터 항목은 MSBuild 작업의 Projects 특성에 전달된 항목에만 적용됩니다.These new metadata items are applicable only to items passed in the Projects attribute of the MSBuild Task.

다중 프로세서 빌드의 이점Multi-Processor Build Benefits

이러한 새 메타데이터를 사용하는 경우의 주요 이점 중 하나는 다중 프로세서 시스템에서 병렬로 프로젝트를 빌드할 때 제공됩니다.One of the major benefits of using this new metadata occurs when you build your projects in parallel on a multi-processor system. 메타데이터를 사용하면 일괄 처리 또는 조건부 MSBuildMSBuild 작업을 수행하지 않고도 모든 프로젝트를 단일 MSBuild 작업에 통합할 수 있습니다.The metadata allows you to consolidate all projects into a single MSBuild Task call without having to perform any batching or conditional MSBuildMSBuild tasks. 그리고 단일 MSBuild 작업만 호출하면 Projects 특성에 나열된 모든 프로젝트가 병렬로 빌드됩니다.And when you call only a single MSBuild Task, all of the projects listed in the Projects attribute will be built in parallel. 단, BuildInParallel=true 특성이 MSBuild 작업에 있어야 합니다. 자세한 내용은 병렬로 여러 프로젝트 빌드를 참조하세요.(Only, however, if the BuildInParallel=true attribute is present in the MSBuild Task.) For more information, see Building Multiple Projects in Parallel.

Properties 메타데이터Properties Metadata

일반적으로는 빌드 구성만 다르게 적용하여 MSBuild 작업을 통해 여러 솔루션 파일을 빌드합니다.A common scenario is when you are building multiple solution files using the MSBuild Task, only using different build configurations. 예를 들어 a1 솔루션은 디버그 구성을 사용하여 빌드하고 a2 솔루션은 릴리스 구성을 사용하여 빌드할 수 있습니다.You may want to build solution a1 using the Debug configuration and solution a2 using the Release configuration. MSBuildMSBuild 2.0에서 이 프로젝트 파일은 다음과 같이 표시됩니다.In MSBuildMSBuild 2.0, this project file would look like the following:

참고

다음 예제에서 “...”는 추가 솔루션 파일을 나타냅니다.In the following example, "..." represents additional solution files.

a.proja.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
    <Target Name="Build">  
        <MSBuild Projects="a1.sln..." Properties="Configuration=Debug"/>  
        <MSBuild Projects="a2.sln" Properties="Configuration=Release"/>  
    </Target>  
</Project>  

그러나 Properties 메타데이터를 사용하면 아래에 나와 있는 것처럼 단일 MSBuild 작업을 사용하여 이 작업을 간소화할 수 있습니다.By using the Properties metadata, however, you can simplify this to use a single MSBuild Task, as shown by the following:

a.proja.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
    <ItemGroup>  
        <ProjectToBuild Include="a1.sln...">  
            <Properties>Configuration=Debug</Properties>  
        </ProjectToBuild>  
        <ProjectToBuild Include="a2.sln">  
            <Properties>Configuration=Release</Properties>  
        </ProjectToBuild>  
    </ItemGroup>  
    <Target Name="Build">  
        <MSBuild Projects="@(ProjectToBuild)"/>  
    </Target>  
</Project>  

- 또는 -- or -

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
    <ItemGroup>  
        <ProjectToBuild Include="a1.sln..."/>  
        <ProjectToBuild Include="a2.sln">  
            <Properties>Configuration=Release</Properties>  
        </ProjectToBuild>  
    </ItemGroup>  
    <Target Name="Build">  
        <MSBuild Projects="@(ProjectToBuild)"   
          Properties="Configuration=Debug"/>  
    </Target>  
</Project>  

AdditionalProperties 메타데이터AdditionalProperties Metadata

MSBuild 작업을 사용하여 두 솔루션 파일을 빌드하는 시나리오를 가정해 보겠습니다. 이 두 파일은 모두 릴리스 구성을 사용하지만 한 파일은 x86 아키텍처를 사용하고 다른 파일은 ia64 아키텍처를 사용합니다.Consider the following scenario where you are building two solution files using the MSBuild Task, both using the Release configuration, but one using the x86 architecture and the other using the ia64 architecture. 이러한 솔루션 파일을 빌드하려면 MSBuildMSBuild 2.0에서는 MSBuild 작업의 여러 인스턴스를 만들어야 했습니다. 즉, x86 아키텍처가 포함된 릴리스 구성을 사용하는 프로젝트를 빌드하는 인스턴스 하나와 ia64 아키텍처가 포함된 릴리스 구성을 사용하는 또 다른 인스턴스를 만들어야 했습니다.In MSBuildMSBuild 2.0, you would need to create multiple instances of the MSBuild Task: one to build the project using the Release configuration with the x86 Architecture, the other using the Release configuration with the ia64 architecture. 이 경우 프로젝트 파일은 다음과 같이 표시됩니다.Your project file would look like the following:

a.proja.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
    <Target Name="Build">  
        <MSBuild Projects="a1.sln..." Properties="Configuration=Release;   
          Architecture=x86"/>  
        <MSBuild Projects="a2.sln" Properties="Configuration=Release;   
          Architecture=ia64"/>  
    </Target>  
</Project>  

AdditionalProperties 메타데이터를 사용하는 경우에는 다음 코드를 사용하여 단일 MSBuild 작업을 사용하도록 이 작업을 간소화할 수 있습니다.By using the AdditionalProperties metadata, you can simplify this to use a single MSBuild Task by using the following:

a.proja.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
    <ItemGroup>  
        <ProjectToBuild Include="a1.sln...">  
            <AdditionalProperties>Architecture=x86  
              </AdditionalProperties>  
        </ProjectToBuild>  
        <ProjectToBuild Include="a2.sln">  
            <AdditionalProperties>Architecture=ia64  
              </AdditionalProperties>  
        </ProjectToBuild>  
    </ItemGroup>  
    <Target Name="Build">  
        <MSBuild Projects="@(ProjectToBuild)"   
          Properties="Configuration=Release"/>  
    </Target>  
</Project>  

예제Example

다음 예제에서는 MSBuild 작업을 사용하여 ProjectReferences 항목 컬렉션으로 지정된 프로젝트를 빌드합니다.The following example uses the MSBuild task to build the projects specified by the ProjectReferences item collection. 결과 대상 출력은 AssembliesBuiltByChildProjects 항목 컬렉션에 저장됩니다.The resulting target outputs are stored in the AssembliesBuiltByChildProjects item collection.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

    <ItemGroup>  
        <ProjectReferences Include="*.*proj" />  
    </ItemGroup>  

    <Target Name="BuildOtherProjects">  
        <MSBuild  
            Projects="@(ProjectReferences)"  
            Targets="Build">  
            <Output  
                TaskParameter="TargetOutputs"  
                ItemName="AssembliesBuiltByChildProjects" />  
        </MSBuild>  
    </Target>  

</Project>  

참고 항목See Also

작업 Tasks
작업 참조Task Reference