Обновление командной строки nuget не обнаруживает все пакеты.config, которые необходимо обновить

У нас есть шаг сборки, который устанавливает и обновляет пакеты nuget в решении на нашем сервере сборки (TeamCity). Недавно это перестало делать обновления правильно. Я исследовал это и обнаружил, что проблема, как представляется, заключается в том, что команда обновления в nuget не обновляет все проекты в решении. Я могу повторить это на моей локальной машине.

Когда я запускаю эту команду:

.nuget\NuGet.exe update Our.Company.sln -Source http:/ourTcServer:8888/guestAuth/app/nuget/v1/FeedService.svc -RepositoryPath packages -verbosity detailed

Я получаю список из 10 проектов, которые он собирается обновить

Found 10 projects with a packages.config file. (
Company.Project1.csproj,
Company.Project2.csproj,
Company.Project3.csproj, 
Company.Project4.csproj, 
Company.Project4.SubProject1.csproj,
Company.Project4.SubProject2.csproj,
Company.Project1.SubProject1.csproj, 
Company.Project1.SubProject2.csproj,
Company.Project2.SubProject1.csproj,         
Company.Project2.SubProject1.FurtherSubProject1.csproj)

Однако решение содержит 13 проектов, и все они содержат packages.config файлы и, насколько я могу судить, ничем не отличаются от других проектов. Проекты - это отдельный проект, и его подпроекты и структура каталогов наших проектов соответствуют именам проектов (поэтому project1.subproject1 подразумевает, что subproject1 находится в папке внутри project1) в случае, если это важно. Все проекты с этой проблемой находятся в проекте, который имеет конкретные имена, такие как:

Company.Something.SomethingElse.Routing
Company.Something.SomethingElse.Routing.Tests
Company.Something.SomethingElse.Routing.Tests.Specifications

В случае, если часть имени в маршрутизации вызывает проблемы (у нас была проблема, прежде чем использовать слово Resources в конце нашего названия пакета)

У нас есть более 50 решений, которые используют одинаковую конфигурацию сборки и этапы, и она прекрасно работает для всех из них. Это решение кажется единственным, которое не обновляется корректно.

Кто-нибудь знает, почему это может иметь место? Или кто-нибудь знает, что делает код, который находит пакеты в решении, что может привести к тому, что он не найдет некоторые файлы packages.config? Или что-нибудь, что может помочь отследить эту проблему?

2 ответа

Решение

Итак, проблема была в том, что мы переименовали некоторые из наших проектов и файлов.csproj и не удалили их в старые, неиспользуемые файлы проекта, а в nuget есть фрагмент кода, который находит файл проекта, в который он собирается обновить ссылки обновленные пакеты. Это делается путем нахождения всех файлов.csproj (или любого другого варианта файла проекта, который вы используете) в том же каталоге, что и packages.config. Если это не приводит к получению ровно 1 файла, то выдается исключение, которое впоследствии перехватывается и игнорируется, и ничего не регистрируется, поэтому вы не мудрее.

Надеюсь, это поможет кому-то еще в будущем. Возможно я.

Я обнаружил, что проблема, с которой я столкнулся, заключалась в том, что мои проекты не были в одном дереве каталогов решения.

nuget.exe update Команда, когда данный файл решения ищет файлы packages.config, используя каталог решения в качестве отправной точки вместо просмотра каждого файла проекта в решении.

Из кода nuget на GitHub:

string[] packagesConfigFiles = Directory.GetFiles(
         solutionDir, "*.config", SearchOption.AllDirectories);

Вы можете видеть, что они просто ищут файлы *.config, начиная с каталога решения.

Мои проекты и решения организованы так:

/Libraries/Shared/Shared.csproj
/Programs/NTService/NTService.csproj
/Programs/NTService.sln

В этом случае, если я запусту update для файла NTService.sln, он будет обновлять только ссылки NTService.csproj, поскольку он находится в том же дереве каталогов, что и файл NTService.sln.

Поскольку он просто просматривает все пакеты во всем дереве, я просто помещаю файл решения в корень моего репозитория, а затем запускаю обновление для него. Не имеет значения, какие проекты находятся в этом файле решения.

Другие вопросы по тегам