Import 요소(MSBuild)Import Element (MSBuild)

한 프로젝트 파일의 내용을 다른 프로젝트 파일로 가져옵니다.Imports the contents of one project file into another project file.

<Project><Project>
<Import><Import>

구문Syntax

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

특성 및 요소Attributes and Elements

다음 단원에서는 특성, 자식 요소 및 부모 요소에 대해 설명합니다.The following sections describe attributes, child elements, and parent elements.

특성Attributes

특성Attribute 설명Description
Project 필수 특성입니다.Required attribute.

가져올 프로젝트 파일의 경로입니다.The path of the project file to import. 경로에 와일드카드를 포함할 수 있습니다.The path can include wildcards. 일치하는 파일은 정렬된 순서로 가져오게 됩니다.The matching files are imported in sorted order. 이 기능을 사용하여, 디렉터리에 코드 파일을 추가함으로써 프로젝트에 코드를 추가할 수 있습니다.By using this feature, you can add code to a project just by adding the code file to a directory.
Condition 선택적 특성입니다.Optional attribute.

평가할 조건입니다.A condition to be evaluated. 자세한 내용은 조건을 참조하세요.For more information, see Conditions.

자식 요소Child Elements

없음None

부모 요소Parent Elements

요소Element 설명Description
프로젝트Project MSBuildMSBuild 프로젝트 파일의 필수 루트 요소입니다.Required root element of an MSBuildMSBuild project file.
ImportGroupImportGroup 선택적인 조건으로 그룹화된 Import 요소의 컬렉션을 포함합니다.Contains a collection of Import elements grouped under an optional condition.

주의Remarks

Import 요소를 사용하면 여러 프로젝트 파일에 공통된 코드를 다시 사용할 수 있습니다.By using the Import element, you can reuse code that is common to many project files. 이렇게 하면 공유 코드에 대한 업데이트가 그것을 가져오는 모든 프로젝트에 전파되므로 코드를 더 쉽게 유지 관리할 수 있습니다.This makes it easier to maintain the code because any updates you make to the shared code get propagated to all the projects that import it.

규칙에 따라, 가져온 공유 프로젝트 파일은 .targets 파일로 저장되지만, 실제로는 표준 MSBuildMSBuild 프로젝트 파일입니다.By convention, shared imported project files are saved as .targets files, but they are standard MSBuildMSBuild project files. MSBuildMSBuild 에서는 다른 파일 이름 확장명을 가진 프로젝트를 가져오는 것이 금지되지 않지만, 일관성을 위해 .targets 확장명을 사용할 것을 권장합니다. does not prevent you from importing a project that has a different file name extension, but we recommend that you use the .targets extension for consistency.

가져온 프로젝트의 상대 경로는 가져오는 프로젝트의 디렉터리를 기준으로 해석됩니다.Relative paths in imported projects are interpreted relative to the directory of the importing project. 따라서 프로젝트 파일을 서로 다른 위치의 여러 프로젝트 파일로 가져온 경우, 가져온 프로젝트 파일의 상대 경로는 가져온 각 프로젝트에 대해 다르게 해석됩니다.Therefore, if a project file is imported into several project files in different locations, the relative paths in the imported project file will be interpreted differently for each imported project.

가져온 프로젝트에서 참조되는, 프로젝트 파일과 관련된 MSBuildMSBuild 의 모든 예약된 속성(예: MSBuildProjectDirectoryMSBuildProjectFile)은 가져오는 프로젝트 파일을 기반으로 값이 할당됩니다.All MSBuildMSBuild reserved properties that relate to the project file, for example, MSBuildProjectDirectory and MSBuildProjectFile, that are referenced in an imported project are assigned values based on the importing project file.

가져온 프로젝트에 DefaultTargets 특성이 없는 경우 가져온 프로젝트는 가져온 순서대로 검사되며, 처음 검색된 DefaultTargets 특성의 값이 사용됩니다.If the imported project does not have a DefaultTargets attribute, imported projects are inspected in the order that they are imported, and the value of the first discovered DefaultTargets attribute is used. 예를 들어 ProjectA가 ProjectB와 ProjectC를 순서대로 가져오고 ProjectB가 ProjectD를 가져오는 경우에 MSBuildMSBuild 는 먼저 ProjectA에 지정된 DefaultTargets 를 검색한 다음 ProjectB, ProjectD, 마지막으로 ProjectC를 검색합니다.For example, if ProjectA imports ProjectB and ProjectC (in that order), and ProjectB imports ProjectD, MSBuildMSBuild first looks for DefaultTargets specified on ProjectA, then ProjectB, then ProjectD, and finally ProjectC.

가져온 프로젝트의 스키마는 표준 프로젝트의 스키마와 동일합니다.The schema of an imported project is identical to that of a standard project. MSBuildMSBuild 는 가져온 프로젝트를 빌드할 수는 있지만 그럴 가능성은 매우 낮습니다. 일반적으로 가져온 프로젝트에는 설정할 속성 또는 대상을 실행할 순서에 대한 정보가 포함되어 있지 않기 때문입니다.Although MSBuildMSBuild may be able to build an imported project, it is unlikely because an imported project typically does not contain information about which properties to set or the order in which to run targets. 가져온 프로젝트는 그것을 가져온 상위 프로젝트에 의존하여 해당 정보를 제공합니다.The imported project depends on the project into which it is imported to provide that information.

참고

조건부 import 문은 명령줄 MSBuild에서 작동하지만, Visual StudioVisual Studio IDE(통합 개발 환경)에서는 MSBuild와 작동하지 않습니다.While conditional import statements work in command-line MSBuilds, they do not work with MSBuild in the Visual StudioVisual Studio integrated development environment (IDE). 조건부 가져오기는 프로젝트를 로드할 때 설정된 구성 및 플랫폼 값을 사용하여 평가됩니다.Conditional imports are evaluated by using the configuration and platform values that are set when the project is loaded. 이후 프로젝트 파일의 조건을 재평가하도록 요구하는 변경(예: 플랫폼 변경)이 발생하는 경우 Visual StudioVisual Studio 는 속성 및 항목에 대한 조건은 재평가하지만 가져오기에 대한 조건은 재평가하지 않습니다.If changes are subsequently made that require a reevaluation of the conditionals in the project file, for example, changing the platform, Visual StudioVisual Studio reevaluates the conditions on properties and items, but not on imports. 가져오기 조건부는 재평가되지 않으므로 가져오기는 건너뜁니다.Because the import conditional is not reevaluated, the import is skipped.

이 문제를 해결하려면 조건부 가져오기를 .targets 파일에 넣거나 조건부 블록(예: Choose Element (MSBuild) 블록)에 코드를 넣습니다.To work around this, put conditional imports in the .targets files or put code in a conditional block such as a Choose Element (MSBuild) block.

와일드카드Wildcards

.NET Framework 4에서는 MSBuild가 Project 특성에 와일드카드를 사용하도록 허용합니다.In the .NET Framework 4, MSBuild allows wildcards in the Project attribute. 와일드카드가 있으면 발견되는 모든 일치 항목이 정렬되고(재현 가능성을 위해), 마치 해당 순서가 명시적으로 설정된 것처럼 순서대로 가져오기가 수행됩니다.When there are wildcards, all matches found are sorted (for reproducibility), and then they are imported in that order as if the order had been explicitly set.

이는 파일 이름을 가져오기 파일에 명시적으로 추가하지 않고도 다른 사람이 파일을 가져올 수 있도록 확장성 지점을 제공하려는 경우 유용합니다.This is useful if you want to offer an extensibility point so that someone else can import a file without requiring you to explicitly add the file name to the importing file. 이를 위해 Microsoft.Common.Targets는 파일의 상단에 다음 줄을 포함합니다.For this purpose, Microsoft.Common.Targets contains the following line at the top of the file.

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>  

예제Example

다음 예제에서는 여러 항목과 속성이 있는 프로젝트를 보여주고 일반 프로젝트 파일을 가져옵니다.The following example shows a project that has several items and properties and imports a general project file.

<Project DefaultTargets="Compile"  
    xmlns="http://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>  

참고 항목See Also

프로젝트 파일 스키마 참조 Project File Schema Reference
방법: 여러 프로젝트 파일에서 동일한 대상 사용How to: Use the Same Target in Multiple Project Files