Справочник по файлу 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".
Идентификатор пакета соответствует его идентификатору в nuget.org и в консоли диспетчера пакетов: Install-Package Microsoft.NETCore
.
При восстановлении пакетов ограничение версии "5.0.0"
означает >= 5.0.0
. То есть если версия 5.0.0 недоступна на сервере, но версия 5.0.1 имеется, NuGet устанавливает версию 5.0.1 и предупреждает об обновлении. NuGet выбирает самую раннюю доступную версию на сервере, соответствующую ограничению.
Дополнительные сведения о правилах разрешения см. в разделе Разрешение зависимостей.
Ресурсы, которые передаются из зависимостей в проект верхнего уровня, определяются с помощью разделенного запятыми набора тегов в свойствах include
и exclude
ссылки на зависимость. Эти теги перечислены в приведенной ниже таблице.
Тег включения или исключения | Затрагиваемые папки пакета |
---|---|
contentFiles | Содержимое |
среда выполнения | Runtime, Resources и FrameworkAssemblies |
compile | lib |
сборка | build (свойства и цели MSBuild) |
платформы | платформы |
ничего | Нет |
all | Все папки |
Теги в свойстве exclude
имеют приоритет перед тегами в свойстве include
. Например, include="runtime, compile" exclude="compile"
— это тоже самое, что и include="runtime"
.
Например, чтобы включить папки build
и native
зависимости, используйте следующие свойства:
{
"dependencies": {
"packageA": {
"version": "1.0.0",
"include": "build, native"
}
}
}
Чтобы исключить папки content
и build
зависимости, используйте следующие свойства:
{
"dependencies": {
"packageA": {
"version": "1.0.0",
"exclude": "contentFiles, build"
}
}
}
Список платформ, на которых выполняется проект, например net45
, netcoreapp
, netstandard
.
"frameworks": {
"netcore50": {}
}
В разделе frameworks
допускается только одна запись. (Исключение составляют файлы project.json
проектов ASP.NET, сборка которых выполняется с помощью нерекомендуемой цепочки инструментов DNX, допускающей несколько целевых платформ.)
Содержит список операционных систем и архитектур, в которых выполняется приложение, например win10-arm
, win8-x64
, win8-x86
.
"runtimes": {
"win10-arm": { },
"win10-arm-aot": { },
"win10-x86": { },
"win10-x86-aot": { },
"win10-x64": { },
"win10-x64-aot": { }
}
Пакет, содержащий переносимую библиотеку классов, которая может работать в любой среде выполнения, не требует указания этой среды. Это также должно быть верно в отношении всех зависимостей. В противном случае необходимо указывать среды выполнения.
Определяет набор проверок для зависимостей пакетов. Вы можете определить, где предполагается выполнение переносимой библиотеки классов или приложения. Определения не являются ограничивающими, то есть код может выполняться и в других средах. Однако если вы указываете эти проверки, NuGet проверяет, все ли зависимости совместимы с перечисленными моникерами целевой версии x. Примеры возможных значений: net46.app
, uwp.10.0.app
и т. д.
При выборе элемента в диалоговом окне целевых платформ для переносимой библиотеки классов этот раздел должен заполняться автоматически.
"supports": {
"net46.app": {},
"uwp.10.0.app": {}
}
Раздел Imports предназначен для того, чтобы разрешить пакетам, использующим моникер целевой версии x dotnet
, взаимодействовать с пакетами, которые не объявляют моникер целевой версии x dotnet. Если в проекте используется моникер целевой версии x dotnet
, все пакеты, от которых вы зависите, должны также содержать моникер целевой версии x dotnet
. В противном случае нужно добавить в файл project.json
следующий элемент, чтобы обеспечить совместимость платформ, отличных от dotnet
, с dotnet
:
"frameworks": {
"dotnet": { "imports" : "portable-net45+win81" }
}
Если вы используете моникер целевой версии x dotnet
, система проектов переносимой библиотеки классов добавляет оператор imports
, соответствующий поддерживаемым целевым платформам.
Содержимое файла project.json
, используемого NuGet, представляет собой подмножество данных аналогичного файла в проектах ASP.NET Core. В ASP.NET Core файл project.json
содержит метаданные проекта, сведения о компиляции и зависимости. При использовании в других системах проектов эти три типа данных разносятся по отдельным файлам, поэтому файл project.json
содержит меньше информации. Ниже представлены наиболее важные отличия.
В разделе
frameworks
может быть только одна платформа.Файл не может содержать зависимости, параметры компиляции и другие данные, которые можно увидеть в файлах
project.json
DNX. Так как платформа может быть только одна, нет смысла указывать зависимости для конкретных платформ.Компиляция осуществляется платформой MSBuild, поэтому параметры компиляции, определения препроцессора и т. д. содержатся в файле проекта MSBuild, а не в файле
project.json
.
В NuGet 3 предполагается, что разработчики не редактируют файл project.json
вручную, так как для работы с его содержимым предназначен пользовательский интерфейс диспетчера пакетов в Visual Studio. Вы, безусловно, можете редактировать его, однако сборку проекта для запуска восстановления пакетов необходимо выполнять иным способом. См. раздел Восстановление пакета.
Файл project.lock.json
создается в процессе восстановления пакетов NuGet в проектах, в которых применяется файл project.json
. Он содержит моментальный снимок всех данных, создаваемых в процессе обхода диспетчером NuGet графа пакетов, включая версию, содержимое и зависимости всех пакетов в проекте. Система сборки использует эти данные для выбора пакетов, которые необходимы при сборке проекта, из глобального расположения вместо обращения к локальной папке пакетов в самом проекте. Благодаря этому ускоряется процесс сборки, так как требуется прочитать только файл project.lock.json
вместо нескольких отдельных файлов .nuspec
.
Файл project.lock.json
создается автоматически при восстановлении пакета, поэтому его можно исключить из системы управления версиями, добавив его в файлы .gitignore
и .tfignore
(см. раздел Пакеты и система управления версиями). Однако если вы включите его в систему управления версиями, в журнале изменений будут показаны изменения в разрешении зависимостей с течением времени.