다음을 통해 공유


NuGet 패키지의 MSBuild .props 및 .targets

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

폴더 빌드

NuGet이 향상되면서 빌드 .props.targets을 위한 다양한 폴더가 추가되었습니다.

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

프레임워크별 빌드 폴더

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

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

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

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

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

패키지에 lib 또는 ref 폴더에 파일이 없고 프레임워크별 빌드 폴더 아래의 파일만 있는 경우 해당 패키지는 모든 프로젝트와 호환되는 것으로 간주됩니다. 팩 도구의 최신 버전은 이러한 패키지가 만들어질 때 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 props 및 targets의 콘텐츠에 대한 지침

.props.targets은 패키지 작성자와 대상 프로젝트 자체의 필요에 따라 달라지므로 NuGet은 작성 방법을 제한하지 않습니다.

복원에 영향을 미치는 속성 및 항목을 지정하지 않는 등 패키지의 .props.targets에서 수행하면 안 되는 몇 가지 작업이 자동으로 제외됩니다.

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

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