영어로 읽기

다음을 통해 공유


project.json 참조

중요

이 콘텐츠는 더 이상 사용되지 않습니다. 프로젝트는 packages.config 또는 PackageReference 형식을 사용해야 합니다.

NuGet 3.x 이상

project.json 파일은 패키지 관리 형식이라고 하는 프로젝트에 사용되는 패키지의 목록을 유지 관리합니다. packages.config를 대체하여 NuGet 4.0 이상이 포함된 PackageReference로 대체합니다.

project.lock.json 파일(아래 설명 참조)도 project.json을 사용하는 프로젝트에서 사용됩니다.

project.json에는 다음과 같은 기본 구조가 있습니다. 여기에는 네 개의 최상위 개체 각각에 임의 개수의 자식 개체가 있을 수 있습니다.

{
    "dependencies": {
        "PackageID" : "{version_constraint}"
    },
    "frameworks" : {
        "TxM" : {}
    },
    "runtimes" : {
        "RID": {}
    },
    "supports" : {
        "CompatibilityProfile" : {}
    }
}

종속성

프로젝트의 NuGet 패키지 종속성은 다음과 같은 형식으로 나열됩니다.

"PackageID" : "version_constraint"

예시:

"dependencies": {
    "Microsoft.NETCore": "5.0.0",
    "System.Runtime.Serialization.Primitives": "4.0.10"
}

dependencies 섹션은 NuGet 패키지 관리자 대화 상자에서 패키지 종속성을 프로젝트에 추가하는 부분입니다.

패키지 ID는 nuget.org의 패키지 ID에 해당하며, Install-Package Microsoft.NETCore 패키지 관리자 콘솔에서 사용된 ID와 동일합니다.

패키지를 복원할 때 "5.0.0"의 버전 제약 조건은 >= 5.0.0을 의미합니다. 즉 서버에서 5.0.0이 아닌 5.0.1을 사용할 수 있는 경우 NuGet에서 5.0.1을 설치하고 업그레이드에 대해 경고합니다. 그렇지 않은 경우 NuGet은 제약 조건과 일치하는 서버에서 가능한 가장 낮은 버전을 선택합니다.

확인 규칙에 대한 자세한 내용은 종속성 확인을 참조하세요.

종속성 자산 관리

최상위 프로젝트로 이동하는 종속성의 자산은 종속성 참조의 includeexclude 속성에 쉼표로 구분된 태그의 집합을 지정하여 제어됩니다. 이러한 태그는 아래 표에 나와 있습니다.

include/exclude 태그 영향을 받는 대상 폴더
contentFiles 콘텐츠
runtime Runtime, Resources 및 FrameworkAssemblies
compile lib
build build(MSBuild props 및 targets)
native native
없음 영향을 받는 폴더 없음
all 모든 폴더

exclude로 지정된 태그는 include로 지정된 태그보다 우선 순위가 높습니다. 예를 들어 include="runtime, compile" exclude="compile"include="runtime"과 같습니다.

예를 들어 종속성의 buildnative 폴더를 포함하려면 다음을 사용합니다.

{
  "dependencies": {
    "packageA": {
      "version": "1.0.0",
      "include": "build, native"
    }
  }
}

종속성의 contentbuild 폴더를 제외하려면 다음을 사용합니다.

{
  "dependencies": {
    "packageA": {
      "version": "1.0.0",
      "exclude": "contentFiles, build"
    }
  }
}

프레임워크

net45, netcoreapp, netstandard와 같이 프로젝트가 실행되는 프레임워크가 나열됩니다.

"frameworks": {
    "netcore50": {}
    }

frameworks 섹션에는 하나의 항목만 허용됩니다. (여러 대상을 허용하는 사용되지 않는 DNX 도구 체인으로 빌드된 ASP.NET 프로젝트에 대한 project.json 파일은 예외입니다.)

Runtimes

win10-arm, win8-x64, win8-x86과 같이 앱이 실행되는 운영 체제 및 아키텍처가 나열됩니다.

"runtimes": {
    "win10-arm": { },
    "win10-arm-aot": { },
    "win10-x86": { },
    "win10-x86-aot": { },
    "win10-x64": { },
    "win10-x64-aot": { }
}

모든 런타임에서 실행할 수 있는 PCL이 포함된 패키지는 런타임을 지정할 필요가 없습니다. 또한 모든 종속성을 충족해야 합니다. 그렇지 않으면 런타임을 지정해야 합니다.

지원

패키지 종속성에 대한 검사 집합을 정의합니다. 실행될 PCL 또는 앱의 위치를 정의할 수 있습니다. 코드가 다른 곳에서 실행될 수 있으므로 이 정의는 제한적이지 않습니다. 그러나 이러한 검사를 지정하면 NuGet은 나열된 TxM에서 모든 종속성이 충족되는지 확인합니다. 이 값의 예는 net46.app, uwp.10.0.app 등입니다.

이 섹션은 [이식 가능한 클래스 라이브러리] 대상 대화 상자에서 항목을 선택할 때 자동으로 채워져야 합니다.

"supports": {
    "net46.app": {},
    "uwp.10.0.app": {}
}

가져오기

imports는 dotnet TxM을 사용하는 패키지가 dotnet TxM을 선언하지 않은 패키지와 작동할 수 있도록 설계되었습니다. 프로젝트에서 dotnet TxM을 사용하는 경우 dotnet이 아닌 플랫폼이 dotnet과 호환될 수 있도록 project.json에 다음을 추가하지 않는 한 종속된 모든 패키지에도 dotnet TxM이 있어야 합니다.

"frameworks": {
    "dotnet": { "imports" : "portable-net45+win81" }
}

dotnet TxM을 사용하는 경우 PCL 프로젝트 시스템에서 지원되는 대상을 기반으로 하는 적절한 imports 문을 추가합니다.

이식 가능한 앱 및 웹 프로젝트의 차이점

NuGet에서 사용하는 project.json 파일은 ASP.NET Core 프로젝트에 있는 하위 집합입니다. ASP.NET Core project.json은 프로젝트 메타데이터, 컴파일 정보 및 종속성에 사용됩니다. 다른 프로젝트 시스템에서 이 세 가지 항목을 사용하면 별도의 파일로 분할되고 project.json에는 정보가 거의 포함되지 않습니다. 주목할 만한 차이점은 다음과 같습니다.

  • frameworks 섹션에는 하나의 프레임워크만 있을 수 있습니다.

  • 파일에는 DNX project.json 파일에서 나타나는 종속성, 컴파일 옵션 등이 포함될 수 없습니다. 단일 프레임워크만 있을 수 있으므로 프레임워크 특정 종속성을 입력하는 것은 적합하지 않습니다.

  • 컴파일은 MSBuild에서 처리하므로 컴파일 옵션, 선행 프로세서 정의 등은 모두 project.json이 아니라 MSBuild 프로젝트 파일의 일부입니다.

NuGet 3 이상에서는 Visual Studio의 패키지 관리자 UI에서 내용을 조작하므로 개발자는 project.json을 수동으로 편집할 필요가 없습니다. 즉 파일을 확실히 편집할 수 있지만, 패키지 복원을 시작하거나 다른 방식으로 복원을 호출하려면 프로젝트를 빌드해야 합니다. 패키지 복원을 참조하세요.

project.lock.json

project.lock.json 파일은 project.json을 사용하는 프로젝트에서 NuGet 패키지를 복원하는 과정에서 생성됩니다. NuGet에서 패키지의 그래프를 진행하면서 생성되는 모든 정보의 스냅샷을 저장하며, 프로젝트에 속한 모든 패키지의 버전, 내용 및 종속성이 포함됩니다. 빌드 시스템은 이 기능을 사용하여 프로젝트 자체의 로컬 패키지 폴더를 따르는 대신 프로젝트를 빌드할 때 관련된 전역 위치에서 패키지를 선택합니다. 이렇게 하면 별도의 많은 .nuspec 파일 대신 project.lock.json만 읽어야 하므로 빌드 성능이 더 빠릅니다.

project.lock.json은 패키지 복원 시 자동으로 생성되므로 .gitignore.tfignore파일에 추가하여 원본 제어에서 생략할 수 있습니다(패키지 및 원본 제어 참조). 그러나 원본 제어에 포함하는 경우 시간이 지남에 따라 확인된 종속성의 변경 내용이 변경 기록에 표시됩니다.