Import 요소(MSBuild)
한 프로젝트 파일의 내용을 다른 프로젝트 파일로 가져옵니다.
<Project><Import>
구문
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
특성 및 요소
다음 단원에서는 특성, 자식 요소 및 부모 요소에 대해 설명합니다.
특성
특성 | 설명 |
---|---|
Project |
필수 특성입니다. 가져올 프로젝트 파일의 경로입니다. 경로에 와일드카드를 포함할 수 있습니다. 일치하는 파일은 정렬된 순서로 가져오게 됩니다. 이 기능을 사용하여, 디렉터리에 코드 파일을 추가함으로써 프로젝트에 코드를 추가할 수 있습니다. |
Condition |
선택적 특성입니다. 평가할 조건입니다. 자세한 내용은 조건을 참조하세요. |
Label |
선택적 특성입니다. 이 Import 요소에 식별자를 적용합니다. |
Sdk |
선택적 특성입니다. 프로젝트 SDK를 참조합니다. |
자식 요소
없음
부모 요소
요소 | Description |
---|---|
프로젝트 | MSBuild 프로젝트 파일의 필수 루트 요소입니다. |
ImportGroup | 선택적인 조건으로 그룹화된 Import 요소의 컬렉션을 포함합니다. |
설명
Import
요소를 사용하면 여러 프로젝트 파일에 공통된 코드를 다시 사용할 수 있습니다. 가져오기를 사용하면 공유 코드에 대한 업데이트가 그것을 가져오는 모든 프로젝트에 전파되므로 코드를 더 쉽게 유지 관리할 수 있습니다.
규칙에 따라 가져온 공유 프로젝트 파일은 파일로 .targets
저장되지만 표준 MSBuild 프로젝트 파일입니다. MSBuild는 다른 파일 이름 확장명을 가진 프로젝트를 가져올 수 없으므로 일관성을 위해 확장명을 .targets
사용하는 것이 좋습니다.
가져온 프로젝트의 상대 경로는 가져오는 프로젝트의 디렉터리를 기준으로 해석됩니다(이 단락 후반에서 설명하는 몇 가지 예외가 있음). 따라서 프로젝트 파일을 서로 다른 위치의 여러 프로젝트 파일로 가져온 경우, 가져온 프로젝트 파일의 상대 경로는 가져온 각 프로젝트에 대해 다르게 해석됩니다. 두 가지 예외 사항이 있습니다. 한 가지 예외는 Import
요소에서 경로가 항상 Import
요소가 포함된 프로젝트를 기준으로 해석된다는 것입니다. 또 다른 예외는 UsingTask
가 항상 UsingTask
요소가 포함된 파일을 기준으로 AssemblyFile
특성의 상대 경로를 해석한다는 것입니다.
가져온 프로젝트에서 참조되는, 프로젝트 파일과 관련된 MSBuild의 모든 예약된 속성(예: MSBuildProjectDirectory
및 MSBuildProjectFile
)은 가져오는 프로젝트 파일을 기반으로 값이 할당됩니다.
가져온 프로젝트에 DefaultTargets
특성이 없는 경우 가져온 프로젝트는 가져온 순서대로 검사되며, 처음 검색된 DefaultTargets
특성의 값이 사용됩니다. 예를 들어 ProjectA가 ProjectB와 ProjectC를 순서대로 가져오고 ProjectB가 ProjectD를 가져오는 경우에 MSBuild는 먼저 ProjectA에 지정된 DefaultTargets
를 검색한 다음 ProjectB, ProjectD, 마지막으로 ProjectC를 검색합니다.
가져온 프로젝트의 스키마는 표준 프로젝트의 스키마와 동일합니다. MSBuild는 가져온 프로젝트를 빌드할 수는 있지만 그럴 가능성은 매우 낮습니다. 일반적으로 가져온 프로젝트에는 설정할 속성 또는 대상을 실행할 순서에 대한 정보가 포함되어 있지 않기 때문입니다. 가져온 프로젝트는 그것을 가져온 상위 프로젝트에 의존하여 해당 정보를 제공합니다.
와일드카드
.NET Framework 4에서는 MSBuild가 Project 특성에 와일드카드를 사용하도록 허용합니다. 와일드카드가 있으면 발견되는 모든 일치 항목이 정렬되고(재현 가능성을 위해), 마치 해당 순서가 명시적으로 설정된 것처럼 순서대로 가져오기가 수행됩니다.
이는 파일 이름을 가져오기 파일에 명시적으로 추가하지 않고도 다른 사람이 파일을 가져올 수 있도록 확장성 지점을 제공하려는 경우 유용합니다. 이를 위해 Microsoft.Common.Targets는 파일의 상단에 다음 줄을 포함합니다.
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>
예시
다음 예제에서는 여러 항목과 속성이 있는 프로젝트를 보여주고 일반 프로젝트 파일을 가져옵니다.
<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>