다음을 통해 공유


MSBuild 작업

다른 MSBuild 프로젝트에서 MSBuild 프로젝트를 빌드합니다.

매개 변수

다음 표에서는 MSBuild 작업의 매개 변수에 대해 설명합니다.

매개 변수 설명
BuildInParallel 선택적 Boolean 매개 변수입니다.

true경우 가능한 경우 Projects 매개 변수에 지정된 프로젝트가 병렬로 빌드됩니다. 기본값은 false입니다.
Projects 필수 ITaskItem[] 매개 변수입니다.

빌드할 프로젝트 파일을 지정합니다.
Properties 선택적 String 매개 변수입니다.

자식 프로젝트에 전역 속성으로 적용할 속성 이름/값 쌍의 세미콜론으로 구분된 목록입니다. 이 매개 변수를 지정하면 MSBuild.exe사용하여 빌드할 때 -property 스위치가 있는 속성을 설정하는 것과 기능적으로 동일합니다. 다음은 그 예입니다.

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

Properties 매개 변수를 통해 프로젝트에 속성을 전달하면 프로젝트 파일이 이미 로드된 경우에도 MSBuild에서 프로젝트의 새 인스턴스를 만들 수 있습니다. MSBuild는 지정된 프로젝트 경로에 대한 단일 프로젝트 인스턴스와 고유한 전역 속성 집합을 만듭니다. 예를 들어 이 동작을 사용하면 configuration=Release를 사용하여 myproject.proj호출하는 여러 MSBuild 작업을 만들 수 있으며, 작업에 고유한 속성이 지정되지 않은 경우 myproject.proj 단일 인스턴스를 가져올 수 있습니다. MSBuild에서 아직 볼 수 없는 속성을 지정하면 MSBuild는 프로젝트의 새 인스턴스를 만듭니다. 이 인스턴스는 프로젝트의 다른 인스턴스와 병렬로 빌드할 수 있습니다. 예를 들어 릴리스 구성은 디버그 구성과 동시에 빌드할 수 있습니다.
RebaseOutputs 선택적 Boolean 매개 변수입니다.

true경우 빌드된 프로젝트의 대상 출력 항목에 대한 상대 경로가 호출 프로젝트를 기준으로 조정됩니다. 기본값은 false입니다.
RemoveProperties 선택적 String 매개 변수입니다.

제거할 전역 속성 집합을 지정합니다.
RunEachTargetSeparately 선택적 Boolean 매개 변수입니다.

true경우 MSBuild 작업은 MSBuild에 전달된 목록의 각 대상을 동시에 호출하지 않고 한 번에 하나씩 호출합니다. 이 매개 변수를 true 설정하면 이전에 호출된 대상이 실패한 경우에도 후속 대상이 호출됩니다. 그렇지 않으면 빌드 오류가 모든 후속 대상의 호출을 중지합니다. 기본값은 false입니다.
SkipNonexistentProjects 선택적 Boolean 매개 변수입니다.

true경우 디스크에 없는 프로젝트 파일을 건너뜁습니다. 그렇지 않으면 이러한 프로젝트에서 오류가 발생합니다. 기본값은 false입니다.
SkipNonexistentTargets 선택적 Boolean 매개 변수입니다.

true경우 명명된 Targets 없는 프로젝트 파일은 건너뜁습니다. 그렇지 않으면 이러한 프로젝트에서 오류가 발생합니다. 기본값은 false입니다. MSBuild 15.5에 도입되었습니다.
StopOnFirstFailure 선택적 Boolean 매개 변수입니다.

true경우 프로젝트 중 하나를 빌드하지 못하면 더 이상 프로젝트가 빌드되지 않습니다. 현재 이 옵션은 여러 프로세서를 사용하여 병렬로 빌드할 때 지원되지 않습니다.
TargetAndPropertyListSeparators 선택적 String[] 매개 변수입니다.

대상 및 속성 목록을 Project 항목 메타데이터)로 지정합니다. 구분 기호는 처리하기 전에 이스케이프되지 않습니다. 예를 들어 %3B(이스케이프된 ';')는 이스케이프되지 않은 ';'인 것처럼 처리됩니다.
TargetOutputs 선택적 ITaskItem[] 읽기 전용 출력 매개 변수입니다.

모든 프로젝트 파일에서 빌드된 대상의 출력을 반환합니다. 지정된 대상의 출력만 반환되며 해당 대상이 의존하는 대상에 존재할 수 있는 출력은 반환되지 않습니다.

TargetOutputs 매개 변수에는 다음 메타데이터도 포함됩니다.

- MSBuildSourceProjectFile: 출력을 설정하는 대상이 포함된 MSBuild 프로젝트 파일입니다.
- MSBuildSourceTargetName: 출력을 설정하는 대상입니다. 참고: 각 프로젝트 파일 또는 대상의 출력을 개별적으로 식별하려면 각 프로젝트 파일 또는 대상에 대해 MSBuild 작업을 개별적으로 실행합니다. 모든 프로젝트 파일을 빌드하기 위해 MSBuild 작업을 한 번만 실행하면 모든 대상의 출력이 하나의 배열로 수집됩니다.
Targets 선택적 String 매개 변수입니다.

프로젝트 파일에서 빌드할 대상 또는 대상을 지정합니다. 세미콜론을 사용하여 대상 이름 목록을 구분합니다. MSBuild 작업에 지정된 대상이 없으면 프로젝트 파일에 지정된 기본 대상이 빌드됩니다. 참고: 모든 프로젝트 파일에서 대상이 발생해야 합니다. 그렇지 않으면 빌드 오류가 발생합니다.
ToolsVersion 선택적 String 매개 변수입니다.

이 작업에 전달된 프로젝트를 빌드할 때 사용할 ToolsVersion 지정합니다.

MSBuild 태스크가 프로젝트에 지정된 것과 다른 버전의 .NET Framework를 대상으로 하는 프로젝트를 빌드할 수 있도록 합니다. 유효한 값은 2.0, 3.03.5. 기본값은 3.5.

비고

이 작업은 이전에 나열된 매개 변수 외에도 Task 클래스에서 상속되는 TaskExtension 클래스의 매개 변수를 상속합니다. 이러한 추가 매개 변수 및 해당 설명 목록은 TaskExtension 기본 클래스참조하세요.

Exec 작업 사용하여 MSBuild.exe시작하는 것과 달리 이 작업은 동일한 MSBuild 프로세스를 사용하여 자식 프로젝트를 빌드합니다. 건너뛸 수 있는 이미 빌드된 대상 목록은 부모 빌드와 자식 빌드 간에 공유됩니다. 새 MSBuild 프로세스가 만들어지지 않으므로 이 작업도 더 빠릅니다.

이 작업은 프로젝트 파일뿐만 아니라 솔루션 파일도 처리할 수 있습니다. MSBuild 17.12 이상에서는 .slnx.sln 솔루션 파일 형식이 모두 허용됩니다.

구성에 원격 인프라(예: 포트, 프로토콜, 제한 시간, 재시도 등)가 포함되더라도 프로젝트를 동시에 빌드할 수 있도록 하기 위해 MSBuild에서 필요한 모든 구성은 구성 파일을 사용하여 구성할 수 있어야 합니다. 가능하면 구성 항목을 MSBuild 작업의 작업 매개 변수로 지정할 수 있어야 합니다.

MSBuild 3.5부터 솔루션 프로젝트는 이제 빌드하는 모든 하위 프로젝트에서 TargetOutputs를 표시합니다.

프로젝트에 속성 전달

MSBuild 3.5 이전 버전의 MSBuild에서는 MSBuild 항목에 나열된 여러 프로젝트에 다양한 속성 집합을 전달하는 것이 어려웠습니다. MSBuild 작업속성 특성을 사용한 경우 MSBuild 작업 일괄 처리하고 항목 목록의 각 프로젝트에 대해 조건부로 다른 속성을 제공하지 않는 한 해당 설정이 빌드되는 모든 프로젝트에 적용되었습니다.

그러나 MSBuild 3.5는 MSBuild 작업사용하여 빌드 중인 여러 프로젝트에 대해 서로 다른 속성을 전달할 수 있는 유연한 방법을 제공하는 두 개의 새 예약 메타데이터 항목인 Properties 및 AdditionalProperties를 제공합니다.

비고

이러한 새 메타데이터 항목은 MSBuild 작업Projects 특성에 전달된 항목에만 적용됩니다.

다중 프로세서 빌드 이점

이 새 메타데이터를 사용할 경우의 주요 이점 중 하나는 다중 프로세서 시스템에서 프로젝트를 병렬로 빌드할 때 발생합니다. 메타데이터를 사용하면 일괄 처리 또는 조건부 MSBuild 작업을 수행할 필요 없이 모든 프로젝트를 단일 MSBuild 작업 호출로 통합할 수 있습니다. 또한 단일 MSBuild 작업호출하면 Projects 특성에 나열된 모든 프로젝트가 병렬로 빌드됩니다. (그러나 BuildInParallel=true 특성이 MSBuild 작업있는 경우에만 .) 자세한 내용은 병렬여러 프로젝트 빌드를 참조하세요.

속성 메타데이터

지정된 경우 Properties 메타데이터는 작업의 Properties 매개 변수를 재정의하고 AdditionalProperties 메타데이터는 매개 변수의 정의에 추가됩니다.

일반적인 시나리오는 다른 빌드 구성만 사용하여 MSBuild 작업사용하여 여러 솔루션 파일을 빌드하는 경우입니다. 릴리스 구성을 사용하여 디버그 구성 및 솔루션 a2를 사용하여 솔루션 a1을 빌드할 수 있습니다. MSBuild 2.0에서 이 프로젝트 파일은 다음과 같습니다.

비고

다음 예제에서는 "..." 는 추가 솔루션 파일을 나타냅니다.

a.proj

<Project>
    <Target Name="Build">
        <MSBuild Projects="a1.sln..." Properties="Configuration=Debug"/>
        <MSBuild Projects="a2.sln" Properties="Configuration=Release"/>
    </Target>
</Project>

그러나 속성 메타데이터를 사용하면 다음 예제와 같이 단일 MSBuild 작업사용하도록 이 코드를 간소화할 수 있습니다.

a.proj

<Project>
    <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>

-또는-

<Project>
    <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 메타데이터

릴리스 구성을 사용하지만 다른 하나는 x86 아키텍처를 사용하고 다른 하나는 ia64 아키텍처를 사용하는 MSBuild 작업사용하여 두 개의 솔루션 파일을 빌드하는 다음 시나리오를 고려합니다. MSBuild 2.0에서는 MSBuild 작업여러 인스턴스를 만들어야 합니다. 하나는 x86 아키텍처에서 릴리스 구성을 사용하여 프로젝트를 빌드하고, 다른 하나는 ia64 아키텍처와 릴리스 구성을 사용하여 프로젝트를 빌드해야 합니다. 프로젝트 파일은 다음과 같습니다.

a.proj

<Project>
    <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 작업 사용하도록 간소화할 수 있습니다.

a.proj

<Project>
    <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>

예시

다음 예제에서는 MSBuild 작업을 사용하여 ProjectReferences 항목 컬렉션에 지정된 프로젝트를 빌드합니다. 결과 대상 출력은 AssembliesBuiltByChildProjects 항목 컬렉션에 저장됩니다.

<Project>

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

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

</Project>

참고하십시오