День 1210. #ЧтоНовенького
Централизованное Управление Пакетами
Управление зависимостями — основная функция NuGet. В одном проекте это может быть просто, а в многопроектных решениях могут возникать трудности. Если вы управляете общими зависимостями для нескольких различных проектов, теперь можно использовать функции централизованного управления пакетами NuGet.
Исторически зависимости пакетов NuGet управлялись в двух основных местах:
- packages.config – XML-файл, используемый в старых типах проектов для хранения списка пакетов, на которые ссылается проект,
- <PackageReference /> — элемент XML, используемый в новых типах проектов, который управляет зависимостями NuGet непосредственно в файлах проекта.
Начиная с NuGet 6.2, вы можете централизованно управлять своими зависимостями в своих проектах, добавив файл Directory.Packages.props. Функционал доступен во всех последних версиях инструментов разработки.
Создайте файл Directory.Packages.props в корне решения и установите ManagePackageVersionsCentrally в true. Далее вы можете определять версии пакетов, необходимых для вашего решения:
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
</Project>
В проектах решения используйте тот же синтаксис <PackageReference /> для ссылок на пакеты, но без атрибута Version (можно переопределить версию в конкретном проекте с помощью атрибута VersionOverride):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" />
</ItemGroup>
</Project>
Для простоты для каждого проекта оценивается только один файл Directory.Packages.props. Если в вашем репозитории их несколько, будет выбран файл, ближайший к каталогу вашего проекта.
Предупреждение
При использовании централизованного управления пакетами вы увидите предупреждение NU1507, если в вашей конфигурации определено более одного источника пакетов. Чтобы это исправить, добавьте файл nuget.config в корень проекта с сопоставлением источников пакетов:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
<packageSourceMapping>
<packageSource key="nuget.org">
<package pattern="*" />
</packageSource>
</packageSourceMapping>
</configuration>
Можно добавить дополнительные источники и конфигурацию при необходимости. См. подробнее тут
Замечание
В Visual Studio 2022 возникает проблема при обновлении пакетов через NuGet Package Manager. После обновления меняется версия пакета в файле .csproj проекта (добавляется атрибут Version="…", вместо обновления его в файле Directory.Packages.props), что приводит к ошибке компиляции. Приходится исправлять это, вручную редактируя оба файла. Надеюсь, в будущем это исправят. Ишью им отправил :)
Источник: devblogs.microsoft.com/nuget/i…nagement