Project.json 파일

이전 글 보기

번역: 남정현

날짜: 2014-08-24

이 문서에 대하여

이 문서는 2014년 8월 19일에 작성된 https://github.com/aspnet/Home/wiki/Project.json-file 의 내용을 한국어로 번역한 것으로, 원본 문서 작성자는 ASP.NET vNext 팀입니다. 오역, 어색한 부분, 매끄럽지 않은 부분이 있을 경우 알려주시면 적극적으로 반영하도록 하겠습니다.

스키마

http://json.schemastore.org/project

의존성

의존성 섹션은 여러분의 애플리케이션이 사용하는 모든 의존성들을 열거합니다. 이름과 버전으로 정의할 수 있으며, 런타임 로더가 어떤 것을 반드시 로드해야 할지 결정합니다. NuGet 패키지, 소스 코드 등이 될 수 있습니다.

[json]
{

“dependencies”: {

“Microsoft.AspNet.ConfigurationModel”: “0.1-alpha-*”,

“SomeProject”: “”

}

}
[/json]

여기서 사용할 수 있는 또 다른 기능으로 아래와 같이 더 구체적으로 의존성 설정을 지정하는 것이 가능합니다.

[json]
{

“dependencies”: {

“Microsoft.AspNet.ConfigurationModel”: { “version”: “0.1-alpha-*”, “options”: “private” },

“FakeToolingPackage” : {“version”: “0.1″, “options”: “dev”},

“SomeProject”: “”

}

}
[/json]

참조에는 여러 가지 다른 종류들이 있을 수 있습니다.

  • Private – 의존성을 인텔리센스나 혹은 컴필레이션에 노출하지 않도록 할 수 있습니다.
  • Bago (Build and go away) – 이 참조를 컴파일한 후에 대상 프로젝트 안으로 같이 컴파일됩니다.

어떻게 의존성 버전이 선택되는지에 대한 더 상세한 정보는 https://github.com/aspnet/Home/wiki/Dependency-Resolution 에서 자세히 확인할 수 있습니다.

Configurations 섹션

Configurations는 컴필레이션 설정에 대한 이름이 붙여진 그룹 항목들입니다. 실행 시점에는 기본으로 주어지는 설정 두 가지가 있는데, 바로 Debug와 Release입니다. 이들 설정을 project.json에 필요에 따라 다시 설정하거나 새로운 설정을 더 추가하는 것도 가능합니다.

[json]
{

“configurations”: {

“Debug”: {

“compilationOptions”: {

“define”: ["DEBUG", "TRACE"],

“debugSymbols”: “full”

}

},

“Release”: {

“compilationOptions”: {

“define”: ["RELEASE", "TRACE"],

“optimize”: true,

“debugSymbols”: “pdbOnly”

}

}

}

}
[/json]

Frameworks 섹션

어느 프레임워크를 대상으로 개발된 프로그램인지 정의하고, 해당 구성에서 참조하는 의존성들을 dependencies에서 정의할 수 있습니다. 아래 코드 조각에서는 데스크톱 (net45) 또는 Core CLR (k10) 중 하나를 사용할 것입니다. Core CLR은 BCL을 만들기 위해서 더 많은 참조들에 대한 의존성을 가집니다.

[json]
{

“frameworks”: {

“net45″: {},

“k10″: {

“dependencies”: {

“System.Collections”: “4.0.0.0″,

“System.Collections.Concurrent”: “4.0.0.0″,

“System.ComponentModel”: “4.0.0.0″,

“System.Linq”: “4.0.0.0″,

“System.Reflection”: “4.0.10.0″,

“System.Runtime”: “4.0.20.0″,

“System.Runtime.InteropServices”: “4.0.10.0″,

“System.Threading”: “4.0.0.0″,

“System.Threading.Tasks”: “4.0.0.0″

}

}

}

}
[/json]

Sources 섹션

sources 섹션은 컴파일해야 할 소스 코드들을 지정합니다.

[json]
{

“code”: “*.cs”,

“exclude”: “buggy/**/*.cs”,

“resources”: “embed/**/*.*”

}
[/json]

공유 파일 섹션

여러 프로젝트에서 의존하는 코드를 공유할 수 있습니다. 공유 어셈블리 정보 같은 내용을 담고 있는 코드를 공유하기 위해서, 공통 프로젝트를 만들고, 이 프로젝트에서 공유 파일 섹션을 포함하도록 공유할 코드를 참조하게 하면 됩니다. 그 후에는 새로 만든 공통 프로젝트를 참조하는 프로젝트라면 항상 프로젝트에 해당 파일들이 같이 포함되어 컴파일이 이루어지게 됩니다.

[json]
{

“shared”: “*.cs”

}
[/json]

컴파일 옵션

컴파일 옵션에서는 Roslyn으로 전달할 설정을 지정할 수 있습니다. 여기서 언어의 버전을 선택할 수 있습니다.

[json]
{

“compilationOptions”: {

“define”: ["SOMETHING"],

“allowUnsafe”: true,

“warningsAsErrors” : true,

“languageVersion”: “experimental”

}

}
[/json]

명령

K.cmd를 실행할 때에는 실행하려는 명령의 이름을 지정할 수 있습니다. 아래 코드 조각은 K web이라는 명령어를 실행할 때 셀프 호스트를 시작하도록 하고 있고, K test라는 명령어를 실행할 때에는 모든 단위 테스트를 실행하도록 하고 있습니다.

[json]
{

“commands”: {

“web”: “Microsoft.AspNet.Hosting server.name=Microsoft.AspNet.Server.WebListener server.urls=http://localhost:5001″,

“test”: “Xunit.KRunner”

}

}
[/json]

스크립트

KPM에서 어떤 일을 수행하기 전과 후에 발생하는 이벤트에 간섭하여 추가 작업을 지시할 수 있습니다.

[json]
{

“scripts”: {

“prebuild”: “echo before building”,

“postbuild”: “echo after building”,

“prepack”: “echo before packing”,

“postpack”: “echo after packing”,

“prerestore”: “echo before restoring packages”,

“postrestore”: “echo after restoring packages”

}

}
[/json]

그리고 사용 가능한 변수들은 다음과 같습니다.

</p><p>%project:Directory% - 프로젝트 디렉터리 경로
</p><p>%project:Name% - 프로젝트 이름
</p><p>%project:Version% - 프로젝트 버전<br />

메타데이터

프로젝트에 대한 메타데이터를 기록할 수 있습니다.

[json]
{

“version”: “0.1-alpha”,

“authors”: ["John Doe"],

“description”: “A wonderful library that does nice stuff”

}
[/json]

Entity Framework 프로젝트에서 가져온 project.json 파일의 한 예시

[json]
{

“version”: “0.1-alpha-*”,

“compilationOptions”: {

“warningsAsErrors”: true

},

“dependencies”: {

“Microsoft.Bcl.Immutable”: “1.1.18-beta-*”,

“Microsoft.AspNet.ConfigurationModel”: “0.1-alpha-*”,

“Microsoft.AspNet.DependencyInjection”: “0.1-alpha-*”,

“Microsoft.AspNet.Logging”: “0.1-alpha-*”,

“System.Data.Common”: “0.1-alpha-*”

},

“code”: “**\\*.cs;..\\Shared\\*.cs”,

“frameworks”: {

“net45″: {

“dependencies”: {

“System.Runtime”: “”,

“System.Collections”: “”

}

},

“k10″: {

“dependencies”: {

“System.Collections”: “4.0.0.0″,

“System.Collections.Concurrent”: “4.0.0.0″,

“System.ComponentModel”: “4.0.0.0″,

“System.Console”: “4.0.0.0″,

“System.Diagnostics.Contracts”: “4.0.0.0″,

“System.Diagnostics.Debug”: “4.0.10.0″,

“System.Globalization”: “4.0.10.0″,

“System.Linq”: “4.0.0.0″,

“System.Linq.Expressions”: “4.0.0.0″,

“System.Linq.Queryable”: “4.0.0.0″,

“System.Reflection”: “4.0.10.0″,

“System.Reflection.Extensions”: “4.0.0.0″,

“System.Resources.ResourceManager”: “4.0.0.0″,

“System.Runtime”: “4.0.20.0″,

“System.Runtime.Extensions”: “4.0.10.0″,

“System.Threading”: “4.0.0.0″,

“System.Threading.Tasks”: “4.0.10.0″

}

}

}

}
[/json]