Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Важный
Это содержимое устарело. Проекты должны использовать форматы PackageReference. Узнайте, как перенести проект project.json в PackageReference.
NuGet 3.x
Файл project.json
поддерживает список пакетов, используемых в проекте, который называется форматом управления пакетами. Он заменяет packages.config
, но в свою очередь заменен PackageReference с NuGet 4.0+.
Файл project.lock.json
(описано ниже) также используется в проектах, использующих project.json
.
project.json
имеет следующую базовую структуру, где каждый из четырех объектов верхнего уровня может иметь любое количество дочерних объектов:
{
"dependencies": {
"PackageID" : "{version_constraint}"
},
"frameworks" : {
"TxM" : {}
},
"runtimes" : {
"RID": {}
},
"supports" : {
"CompatibilityProfile" : {}
}
}
Перенос project.json в PackageReference
Миграция между project.json и PackageReference проста. Самый простой способ использовать встроенный переносчик в последней версии Visual Studio 2022 с обновлением 14.
- Загрузите проект project.json в Visual Studio.
- Перейдите в обозреватель решений проекта project.json и найдите узел зависимостей.
- Щелкните
Migrate project.json to PackageReference...
!
Кроме того, можно использовать миграции dotnetили выполнить миграцию вручную, приняв все содержимое из файла project.json и заменив его эквивалентным синтаксисом PackageReference .
Зависимости
Выводит список зависимостей пакета 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
свойства ссылки на зависимость. Теги перечислены ниже.
Тег include/Exclude | Затронутые папки целевого объекта |
---|---|
contentFiles | Содержание |
Среды выполнения | Среда выполнения, ресурсы и платформыAssemblies |
компилировать | lib |
строить | сборка (props и целевые объекты MSBuild) |
родной | родной |
никакой | Нет папок |
все | Все папки |
Теги, указанные с 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": { }
}
Пакет, содержащий PCL, который может выполняться в любой среде выполнения, не требуется указывать среду выполнения. Это также должно быть верно для любых зависимостей, в противном случае необходимо указать среды выполнения.
Поддерживает
Определяет набор проверок зависимостей пакета. Вы можете определить, где будет выполняться PCL или приложение. Определения не являются строгими, так как код может работать в другом месте. Но при указании этих проверок nuGet проверяет, удовлетворены ли все зависимости на перечисленных TxMs. Ниже приведены примеры значений: net46.app
, uwp.10.0.app
и т. д.
Этот раздел следует заполнять автоматически при выборе записи в диалоговом окне "Переносимая библиотека классов".
"supports": {
"net46.app": {},
"uwp.10.0.app": {}
}
Импорт
Импорты предназначены для предоставления пакетам, которые используют dotnet
TxM для работы с пакетами, которые не объявляют dotnet TxM. Если проект использует dotnet
TxM, то все пакеты, от которых вы зависите, также должны иметь dotnet
TxM, если в project.json
не добавлено следующее, чтобы разрешить совместимость платформ, отличных от dotnet
, с dotnet
:
"frameworks": {
"dotnet": { "imports" : "portable-net45+win81" }
}
Если вы используете dotnet
TxM, система проектов PCL добавляет соответствующую инструкцию imports
на основе поддерживаемых целевых объектов.
Различия от переносимых приложений и веб-проектов
Файл project.json
, используемый NuGet, представляет собой подмножество, которое найдено в проектах ASP.NET Core. В ASP.NET Core project.json
используется для метаданных проекта, сведений о компиляции и зависимостях. При использовании в других системах проектов эти три вещи разделяются на отдельные файлы и project.json
содержат меньше информации. К заметным различиям относятся:
В разделе
frameworks
может быть только одна платформа.Файл не может содержать зависимости, параметры компиляции и т. д., отображаемые в файлах DNX
project.json
. Учитывая, что существует только одна платформа, она не имеет смысла вводить зависимости для конкретной платформы.Компиляция обрабатывается MSBuild, поэтому параметры компиляции, препроцессор определяет и т. д. являются частью файла проекта MSBuild, а не
project.json
.
В NuGet 3+разработчики не должны вручную изменять project.json
, так как пользовательский интерфейс диспетчера пакетов в Visual Studio управляет содержимым. Это сказало, вы, безусловно, можете изменить файл, но необходимо создать проект, чтобы запустить восстановление пакета или вызвать восстановление другим способом. См. восстановления пакетов.
project.lock.json
Файл project.lock.json
создается в процессе восстановления пакетов NuGet в проектах, использующих project.json
. Он содержит моментальный снимок всех сведений, создаваемых в виде NuGet, содержит график пакетов и включает версию, содержимое и зависимости всех пакетов в проекте. Система сборки использует это для выбора пакетов из глобального расположения, которое относится при создании проекта, а не в зависимости от локальной папки пакетов в самом проекте. Это приводит к более быстрой производительности сборки, так как необходимо читать только project.lock.json
вместо множества отдельных .nuspec
файлов.
project.lock.json
автоматически создается при восстановлении пакета, поэтому его можно исключить из системы управления версиями, добавив его в файлы .gitignore
и .tfignore
(см. пакеты исистемы управления версиями. Однако если включить его в систему управления версиями, журнал изменений отображает изменения в зависимостях, разрешенных с течением времени.