Import 요소(MSBuild)
한 프로젝트 파일의 내용을 다른 프로젝트 파일로 가져옵니다.
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
특성 및 요소
다음 단원에서는 특성, 자식 요소 및 부모 요소에 대해 설명합니다.
특성
특성 |
설명 |
---|---|
Project |
필수 특성입니다. 가져올 프로젝트 파일의 경로입니다. 경로에 와일드카드를 포함시킬 수 있습니다. 일치하는 파일을 정렬된 순서로 가져옵니다. 이 기능을 사용하면 디렉터리에 코드 파일만 추가하여 프로젝트에 코드를 추가할 수 있습니다. |
Condition |
선택적 특성입니다. 확인할 조건입니다. 자세한 내용은 MSBuild 조건을 참조하십시오. |
자식 요소
없음
부모 요소
요소 |
설명 |
---|---|
MSBuild 프로젝트 파일의 필수 루트 요소입니다. |
|
옵션 조건 하에 그룹화된 Import 요소의 컬렉션을 포함합니다. |
설명
Import 요소를 사용하면 여러 프로젝트 파일에 공통인 코드를 다시 사용할 수 있습니다. 공유 코드를 업데이트하면 해당 공유 코드를 가져오는 모든 프로젝트에 전파되므로 코드를 더 손쉽게 유지할 수 있습니다.
가져온 공용 프로젝트 파일은 규칙에 의해 .targets 파일로 저장되지만 여전히 표준 MSBuild 프로젝트 파일입니다. MSBuild에서는 파일 확장명이 다른 프로젝트를 가져올 수도 있지만 일관성을 유지하기 위해 .targets 확장명을 사용하는 것이 좋습니다.
가져온 프로젝트의 모든 상대 경로는 가져오는 프로젝트의 디렉터리를 기준으로 해석됩니다. 따라서 하나의 프로젝트 파일을 서로 다른 위치의 여러 프로젝트 파일에서 가져오는 경우 가져온 프로젝트 파일의 상대 경로는 가져온 각 프로젝트마다 서로 다르게 해석됩니다.
MSBuildProjectDirectory 및 MSBuildProjectFile과 같이 가져온 프로젝트에서 참조하는 프로젝트 파일에 관련된 모든 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) 블록과 같은 조건부 블록에 코드를 넣으십시오.
와일드카드
.NET Framework 4에서는 MSBuild가 프로젝트 속성에 와일드카드를 허용합니다. 와일드카드가 있는 경우 검색된 모든 일치 항목이 재현 가능성을 위해 정렬된 다음 순서가 명시적으로 설정된 것처럼 해당 순서로 일치 항목을 가져옵니다.
이는 가져오는 파일에 파일 이름을 명시적으로 추가하도록 요구하지 않아도 다른 사람이 파일을 가져올 수 있도록 확장성 지점을 제공하려는 경우에 유용합니다. 이를 위해 Microsoft.Common.Targets에는 파일 맨 위에 다음 줄이 포함됩니다.
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>
예제
다음 예제에서는 여러 가지 항목과 속성을 설정하고 일반적인 프로젝트 파일을 가져오는 프로젝트를 보여 줍니다.
<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>