Управление пакетами Nuget для проекта C # представлено в нескольких решениях - PullRequest
1 голос
/ 07 марта 2019

Я сейчас на этапе рефакторинга безумия большого проекта, в котором много устаревших и нестабильных модулей . Я решил разделить решение , которое в настоящее время имеет ВСЕ проекты (около 20, и их будет больше из-за проектов модульного тестирования, которые наверняка придут в ближайшие месяцы), чтобы сделать его более независимым и зернистая.

При таком подходе существуют модули, например Клиенты API, на которые необходимо ссылаться или добавлять в несколько решений.

Проблема в том, что пакеты Nuget восстанавливаются только в том решении, которое было добавлено в первый раз. Итак, самый простой пример:

Решение A:

------ ProjectA

------ APIClient

Решение B:

------ ProjectB

------ APIClient

Поскольку мы не включаем папку с пакетами, это вызывает проблемы с пакетами Nuget:

  1. Клон репо.

  2. Откройте Solution B, соберите его и восстановите Nugets для решения.

  3. Ошибки с пакетами ClientAPI в решении B.

  4. Перейти к решению A собрать его и восстановить Nugets для решения

  5. Вернитесь к решению B.

  6. Для ClientAPI в решении B восстанавливаются нуги, и ошибки исчезают.

Есть ли способ как-то:

  • Сделать проект, используя разные пути для каждого решения?
  • Может быть, цепные решения в сборке, чтобы решение А всегда строилось с решением В? Но это звучит как потеря некоторых преимуществ разделения этого большого решения на более мелкие.
  • Использовать какой-либо другой подход, чтобы сделать его более детализированным и при этом не испытывать проблем с необходимостью перестроения всего? Я слышал о частных каналах Nuget, это будет ответом на эту проблему, если мой конфиг это позволяет?

Моя конфигурация:

  • VCS: TFS с TFVC
  • IDE: Visual Studio Proffesional 2017
  • Формат управления пакетами по умолчанию: Packages.config

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Управление пакетами Nuget для проекта C # в нескольких решениях

Спасибо за ответ. Я воспроизвел эту проблему с двумя решениями, SolutionA с проектом APIClient. И SolutionB, добавьте существующий проект APIClient в SolutionA к SolutionB.

Затем, если мы восстановим пакет nuget на SolutionB, пакет в проекте APIClient в SolutionB будет восстановлен в папке \packages в папке SolutionB по умолчанию, а не в папка SolutionA.

В этом случае в проекте APIClient по-прежнему отсутствует ссылка .dll в SolutionB, вам все равно нужно перейти на SolutionA и восстановить пакеты nuget. Вот причина, почему вы получили эту проблему.

Чтобы решить эту проблему, вы можете добавить файл NuGet.Config рядом с SolutionA и SolutionB со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="C:\Packages" />
  </config>
</configuration>

Итак, папка \packages не связана с файлом решения.

Кроме того, если вам интересно, вы можете попробовать преобразовать packages.config в packagereference для проекта APIClient, с этим параметром пакет nuget будет сохранен в папке глобальных пакетов, C:\Users\<UserName>\.nuget\packages ,

Надеюсь, это поможет.

0 голосов
/ 07 марта 2019

Почему вы не добавляете пакет в решение B?

Какой режим пакета вы используете?


Если вы используете режим «Ссылка на пакет», вы должны добавить информацию о пакетев csproj решения B.

Если вы используете режим «Package config», вы должны добавить информацию о пакете в файл package.config решения B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...