다음을 통해 공유


패키지의 MSBuild .props 및 .targets

기존의 어셈블리 외에도 NuGet 패키지는 때때로 해당 패키지를 사용하는 프로젝트에 사용자 지정 빌드 대상 또는 속성을 추가할 수 있습니다. 이 작업은 프로젝트의 빌드 폴더 내에 유효한 MSBuild 파일(예: <package_id>.targets형식 <package_id>.propsContoso.Utility.UsefulStuff.targets )을 추가하여 수행할 수 있습니다.

폴더 빌드

NuGet이 발전함에 따라 빌드 .props.targets 를 위한 다양한 폴더가 추가되었습니다.

폴더 NuGet 버전 사용
build 2.5+ 프로젝트의 모든 프레임워크에 대한 논리를 빌드합니다.
멀티 타겟팅 빌드 4.0+ 여러 프레임워크를 outer build 대상으로 하는 프로젝트에 대한 논리를 빌드합니다. PackageReference만 해당합니다.
buildTransitive 5.0+ 모든 소비 프로젝트로 전이적으로 흐르는 자산에 대한 논리를 빌드합니다. 기능 페이지를 참조하세요. PackageReference만 해당합니다.

프레임워크별 빌드 폴더

모든 3개 빌드 폴더는 프로젝트 대상 프레임워크에 따라 가장 적합한 파일을 결정하기 위해 동일한 패턴을 따릅니다.

루트 빌드 폴더 build/<package_id>.targets 의 파일이며 build/<package_id>.props 모든 대상 프레임워크에 적합한 것으로 간주됩니다.

프레임워크 관련 파일을 제공하려면 먼저 다음과 같은 적절한 하위 폴더 내에 배치합니다.

    \build
        \netstandard1.4
            \Contoso.Utility.UsefulStuff.props
            \Contoso.Utility.UsefulStuff.targets
        \net462
            \Contoso.Utility.UsefulStuff.props
            \Contoso.Utility.UsefulStuff.targets

패키지에서 지원하지 않을 수 있는 프로젝트에서 가양성 설치를 방지하기 위해 적절한 경우 프레임워크별 빌드 폴더를 사용하는 것이 좋습니다.

패키지에 또는 폴더에 libref 파일이 없으며 프레임워크 특정 빌드 폴더의 파일만 있는 경우 해당 패키지는 모든 프로젝트와 호환되는 것으로 간주됩니다. 팩 도구의 최신 버전은 이러한 패키지를 만들 때 NU5127 경고를 발생합니다.

빌드 파일을 사용하여 패키지를 사용하는 프로젝트

PackageReference 프로젝트

.props.targets은 프로젝트 파일에 추가되지 않고, 대신 {projectName}.nuget.g.targets{projectName}.nuget.g.props을 통해 사용할 수 있게 됩니다. 이러한 파일은 복원이 실행될 때 자동으로 생성됩니다.

프로젝트가 둘 이상의 프레임워크를 대상으로 하는 경우 이러한 파일로의 가져오기는 대상 프레임워크 이름에 따라 조건화됩니다.

MSBuild .props.targets 파일은 다중 프레임워크 타겟팅을 위해 \buildMultiTargeting 폴더에 배치할 수 있습니다. 가져오기가 생성되면 MSBuild 속성 $(TargetFramework) 이 비어 있는 조건이 설정됩니다.

packages.config 프로젝트

NuGet은 \build 파일이 포함된 패키지를 설치할 때, 프로젝트 파일에 .targets.props 파일을 가리키는 MSBuild <Import> 요소를 추가합니다. (.props 프로젝트 파일 .targets 의 맨 위에 추가되고 아래쪽에 추가됩니다.) 각 대상 프레임워크에 대해 별도의 조건부 MSBuild <Import> 요소가 추가됩니다.

MSBuild Props 및 Targets를 사용하여 패키지 작성

다음 도구 중 원하는 도구를 사용하여 MSBuild .props.targets 패키지에 포함할 수 있습니다.

MSBuild 소품 및 대상의 콘텐츠에 대한 지침

NuGet은 패키지 작성자가 작성하는 .props.targets의 방식과 해당 대상 프로젝트의 필요에 따라 달라질 수 있도록 제한하지 않습니다.

패키지에서 수행해서는 안 되는 몇 가지 작업이 있습니다.props. .targets 예를 들어 복원에 영향을 주는 속성 및 항목을 지정하지 않으면 자동으로 제외됩니다.

  • TargetFramework, TargetFrameworkMoniker, TargetPlatformMoniker, AssetTargetFallback 등 추가하거나 업데이트하지 않아야 하는 속성의 몇 가지 예입니다.

  • 추가하거나 업데이트하지 않아야 하는 항목의 몇 가지 예: PackageReference, PackageVersion, PackageDownload 등