다음을 통해 공유


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

여러 개의 MSBuild 프로젝트 파일을 만들었을 때 여러 프로젝트 파일에서 같은 작업과 대상을 사용하는 경우가 있습니다. 각 프로젝트 파일에 그러한 작업이나 대상의 완전한 설명을 포함하는 대신, 대상을 별도의 프로젝트 파일에 저장한 다음 대상을 사용해야 하는 다른 프로젝트로 해당 프로젝트를 가져올 수 있습니다.

Import 요소 사용

Import 요소는 한 프로젝트 파일을 다른 프로젝트 파일에 삽입하는 데 사용됩니다. 가져오는 프로젝트 파일은 유효한 MSBuild 프로젝트 파일이며 올바른 형식의 XML을 포함하고 있어야 합니다. Project 특성은 가져오는 프로젝트 파일에 대한 경로를 지정합니다. Import 요소에 대한 자세한 내용은 Import 요소(MSBuild)를 참조하십시오.

프로젝트를 가져오려면

  1. 가져오기를 수행하는 프로젝트에, 가져오는 프로젝트의 속성과 항목에 대한 매개 변수로 사용되는 모든 속성과 항목을 정의합니다.

  2. Import 요소를 사용하여 프로젝트를 가져옵니다. 예를 들면 다음과 같습니다.

    <Import Project="MyCommon.targets"/>

  3. Import 요소 다음에는 가져오는 프로젝트의 속성과 항목의 기본 정의를 무시해야 하는 모든 속성과 항목을 정의합니다.

확인 순서

MSBuild가 Import 요소에 도달하면 가져오는 프로젝트는 가져오기를 수행하는 프로젝트의 Import 요소 위치에 실제로 삽입됩니다. 따라서 Import 요소의 위치는 속성과 항목의 값에 영향을 줄 수 있습니다. 가져오는 프로젝트가 설정하는 속성 및 항목과 가져오는 프로젝트가 사용하는 속성 및 항목을 이해하는 것은 중요합니다.

프로젝트가 빌드될 때 모든 속성이 먼저 확인되고 이어서 항목이 확인됩니다. 예를 들어, 다음 XML에서는 MyCommon.targets라는 가져오는 프로젝트 파일을 정의합니다.

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Name>MyCommon</Name>
    </PropertyGroup>

    <Target Name="Go">
        <Message Text="Name=$(Name)"/>
    </Target>
</Project>

다음 XML에서는 MyCommon.targets를 가져오는 MyApp.proj를 정의합니다.

<Project
    DefaultTargets="Go"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Name>MyApp</Name>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>

프로젝트가 빌드될 때 다음 메시지가 표시됩니다.

Name="MyCommon"

MyApp.proj에 Name 속성이 정의된 후 프로젝트를 가져오므로, MyCommon.targets에 있는 Name의 정의는 MyApp.proj의 정의를 무시합니다. Name 속성이 정의되기 전에 프로젝트를 가져오는 경우 빌드할 때 다음 메시지가 표시됩니다.

Name="MyApp"

프로젝트를 가져오는 방법

  1. 가져오는 프로젝트의 속성과 항목에 대한 매개 변수로 사용되는 모든 속성과 항목을 프로젝트 파일에 정의합니다.

  2. 프로젝트를 가져옵니다.

  3. 가져오는 프로젝트의 속성과 항목에 대한 기본 정의를 무시해야 하는 모든 속성과 항목을 프로젝트 파일에 정의합니다.

예제

다음 코드 예제에서는 두 번째 코드 예제가 가져오는 MyCommon.targets 파일을 보여 줍니다. .targets 파일은 가져오기를 수행하는 프로젝트의 속성을 확인하여 빌드를 구성합니다.

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
        <Optimize Condition="'$(Flavor)'=='RETAIL'">yes</Optimize>
        <appname>$(MSBuildProjectName)</appname>
    <PropertyGroup>
    <Target Name="Build">
        <Csc Sources="hello.cs"
            Optimize="$(Optimize)"
            OutputAssembly="$(appname).exe"/>
    </Target>
</Project>

다음 코드 예제에서는 MyCommon.targets 파일을 가져옵니다.

<Project DefaultTargets="Build"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor>RETAIL</Flavor>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>

참고 항목

참조

Import 요소(MSBuild)

개념

MSBuild 대상