다음을 통해 공유


Import 요소(MSBuild)

업데이트: 2007년 11월

한 프로젝트 파일의 내용을 다른 프로젝트 파일로 가져옵니다.

<Import Project="ProjectPath"
    Condition="'String A'=='String B'" />

특성 및 요소

다음 단원에서는 특성, 자식 요소 및 부모 요소에 대해 설명합니다.

특성

특성

설명

Project

필수 특성입니다.

가져올 프로젝트 파일의 경로입니다.

Condition

선택적 특성입니다.

확인할 조건입니다. 자세한 내용은 MSBuild 조건을 참조하십시오.

자식 요소

없음

부모 요소

요소

설명

Project

MSBuild 프로젝트 파일의 필수 루트 요소입니다.

설명

Import 요소를 사용하면 여러 프로젝트 파일에 공통인 코드를 다시 사용할 수 있습니다. 코드의 공통 블록을 다른 프로젝트 파일로 옮기면 한 곳에서 코드를 유지 관리하고 변경 내용을 전파할 수 있습니다. 예를 들어, 프로젝트 A와 프로젝트 B에서 해당 빌드에 대한 특정 항목과 속성 값을 설정하고 프로젝트 C에 공통 빌드 프로세스를 포함한 경우를 생각해 볼 수 있습니다. 프로젝트 A와 프로젝트 B에서 프로젝트 C를 가져올 수 있고 빌드 프로세스에 대한 변경 내용은 하나의 파일에만 적용되도록 할 수 있습니다.

가져온 공통 프로젝트 파일은 일반적으로 .targets 파일로 저장되지만 여전히 표준 MSBuild 프로젝트 파일입니다. MSBuild에서는 다른 파일 확장명으로 프로젝트를 가져올 수도 있지만 일관성을 유지하기 위해 .targets 파일 확장명을 사용하는 것이 좋습니다.

가져온 프로젝트의 모든 상대 경로는 가져온 프로젝트의 디렉터리를 기준으로 해석됩니다. 따라서 하나의 프로젝트 파일을 서로 다른 위치의 여러 프로젝트 파일에서 가져오는 경우 가져온 프로젝트 파일의 상대 경로는 가져온 각 프로젝트마다 서로 다르게 해석됩니다.

MSBuildProjectDirectoryMSBuildProjectFile과 같이 가져온 프로젝트에서 참조하는 프로젝트 파일에 관련된 모든 MSBuild 예약 속성의 값은 가져오는 프로젝트 파일을 기반으로 할당됩니다.

가져온 프로젝트에 DefaultTargets 특성이 없으면 프로젝트를 가져온 순서에 따라 각각의 가져온 프로젝트가 검사되고 처음 발견된 DefaultTargets 특성의 값이 사용됩니다. 예를 들어, 프로젝트 A에서 프로젝트 B와 프로젝트 C를 이 순서대로 가져오고 프로젝트 B에서 프로젝트 D를 가져오는 경우, MSBuild에서는 먼저 프로젝트 A에 지정된 DefaultTargets를 조회한 다음 프로젝트 B, 프로젝트 D, 프로젝트 C의 순서대로 특성을 조회합니다.

가져온 프로젝트의 스키마는 표준 프로젝트의 스키마와 동일합니다. MSBuild에서 가져온 프로젝트를 빌드할 수 있지만 가져온 프로젝트에는 대상을 실행할 순서나 설정할 속성에 대한 정보가 들어 있지 않은 경우가 많으므로 빌드에 실패할 수 있습니다. 가져온 프로젝트는 이러한 정보를 제공하기 위해 가져오는 프로젝트에 종속됩니다.

참고

명령줄 MSBuild에서는 조건부 가져오기 문이 작동하는 반면 Visual Studio IDE(통합 개발 환경)에서 호스팅된 MSBuild에서는 조건부 가져오기 문이 작동하지 않습니다. 조건부 가져오기 문은 프로젝트가 로드될 때 설정된 초기 구성 및 플랫폼 기본값을 사용하여 실행됩니다. 이후에 프로젝트 파일에서 플랫폼 변경과 같이 조건부 가져오기 문을 다시 실행해야 하는 변경 작업을 수행하면 Visual Studio에서는 속성 및 항목에 대한 조건만 다시 확인하고 프로젝트를 가져오지는 않습니다. 따라서 조건부 가져오기 문이 다시 실행되지 않으므로 가져오기는 생략됩니다.

이 문제를 해결하려면 조건부 가져오기 문을 .targets 파일에 넣거나 Choose 요소(MSBuild) 블록과 같은 조건부 블록에 코드를 넣으십시오.

예제

다음 코드 예제에서는 여러 가지 항목과 속성을 설정하고 일반적인 프로젝트 파일을 가져오는 프로젝트를 보여 줍니다.

<Project DefaultTargets="Compile"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <resourcefile>Strings.resx</resourcefile>

        <compiledresources>
            $(O)\$(MSBuildProjectName).Strings.resources
        </compiledresources>
    </PropertyGroup>

    <ItemGroup>
        <CSFile Include="*.cs" />

        <Reference Include="System" />
        <Reference Include="System.Data" />
    </ItemGroup>

    <Import Project="$(CommonLocation)\General.targets" />
</Project>

참고 항목

작업

방법: 여러 프로젝트 파일에서 동일한 대상 사용

개념

MSBuild 프로젝트 파일 스키마 참조