Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 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