#c# #visual-studio #nuget
#c# #visual-studio #nuget
Вопрос:
У нас есть десятки решений в репозитории, и мы перенацеливаем каждый проект на net472
from net462
. В настоящее время лучше всего открывать каждое решение в Visual Studio и выполнять следующую команду в консоли диспетчера пакетов.
Update-Package -Reinstall -IgnoreDependencies
Насколько мне известно, консоль PM нельзя использовать вне Visual Studio, поэтому этот метод, конечно, не очень эффективен, поэтому я думал об использовании nuget.exe
инструмента для этого. Однако на первый взгляд я не смог найти ни одной эквивалентной операции или набора аргументов.
В документации на данный момент говорится следующее
Для всех пакетов удалите папку package, затем запустите nuget install. Для одного пакета удалите папку пакета и используйте nuget install для переустановки того же самого.
Исходя из этого, я попытался удалить packages
папку и запустить nuget install
проект, поэтому я ожидал, что он выполнит переустановку. Однако, хотя он действительно установил пакет (to packages
), он не затрагивает packages.config
(для перенацеливания).
Кто-нибудь знает о каком-либо возможном способе автоматизации этого процесса?
Комментарии:
1. Да, это не очень эффективно и лучше не становится. Именно поэтому вам следует как можно скорее перейти на .NET Standard для библиотек классов и .NET Core в целом. Вероятно, вам следует также настроить таргетинг на 4.8, а не только на 4.7.2. 4.8 уже достаточно давно, и следующая миграция в любом случае будет на .NET Core 5. Зачем иметь дело с ошибками в 4.7.2, которые уже были исправлены в 4.8?
2. @PanagiotisKanavos Да, я согласен, но, конечно, к сожалению, сейчас это не вариант 🙂
3. Стандарт .NET — это вариант, особенно если вы нацелены на 4.7.2 и более поздние версии. Вам больше не нужно обрабатывать все временные зависимости . Ваша текущая проблема по существу исчезает. Вам нужно всего лишь обработать несколько зависимостей верхнего уровня и избавиться от немалой части ада совместимости, с которым вы сейчас сталкиваетесь
4. Был там, кстати. Написал сценарии Powershell, чтобы попытаться обновить все проекты в решении, попытался исправить ад совместимости, вызванный несоответствием версии 4.6.2 стандарту .NET Standard 2.0. Угадайте, что — то, что запускается на вашем компьютере, все еще может не работать в рабочей среде. В конце концов, было даже проще просто перейти на новый
csproj
формат вручную, чем обрабатывать обновления таким образом.5. Я думаю, пришло время проверить Мадса Кристенсена.
Ответ №1:
Как добиться полной переустановки NuGet с помощью nuget.exe КЛИ?
Эта команда не может получить то, что вы хотите.
Насколько я знаю, nuget install
должно быть с packages.config
файлом, и он не обновит версию nuget framework packages.config
file автоматически.
Поэтому всякий раз, когда вы меняете целевую версию платформы вашего проекта, использование этой команды не приведет к обновлению целевой версии пакета nuget.
Таким образом, только update-package -reinstall
команда в консоли диспетчера пакетов обновит целевую версию фреймворка packages.config
файла.
А также консоль диспетчера пакетов не может получить доступ к нескольким решениям, поэтому вам нужно открывать каждое решение для запуска этой команды.
Хотя может быть возможно достичь ваших ожиданий с помощью сценариев PowerShell, но это слишком сложно, поэтому проще открывать каждое решение, а затем запускать команду.
В качестве предложения,
1) откройте каждое решение в VS для запуска update-package -reinstall
команды.
2) И переход с packages.config на PackageReference может быть хорошим выбором. В этом случае пакеты nuget автоматически адаптируются к соответствующей версии целевой платформы проекта.
Перед этим вы можете сделать резервную копию своего проекта.
3) Если все это не соответствует вашим требованиям, вы можете предложить функцию на нашем форуме User Voice, чтобы сообщить о своем желании автоматизации. После этого вы можете поделиться ссылкой здесь, и любой, кому это интересно, проголосует за нее, чтобы привлечь больше внимания со стороны Microsoft.
Комментарии:
1. Мы уже обсуждали все это в комментариях. OP уже использует Powershell для перебора всех проектов и переустановки пакетов. Вопрос в том, как избежать открытия тонны проектов только для переустановки через PM. Мы даже обсуждали преимущества перехода на PackageReferences или перехода непосредственно на новый формат csproj, поскольку проблемы с обновлением на самом деле хуже, чем перенос формата проекта
2. И нет, возьмите это у бывшего MVP Microsoft: User Voice Forum не получит никакого внимания от Microsoft. SO существует именно потому, что форумы Technet содержат много плохих ответов, помеченных как принятые сотрудниками MS, которые их опубликовали, и советуют людям перейти на форум User Voice вместо предоставления ответов.
3. Правда в том, что все, что публикуется голосом пользователя, игнорируется в течение нескольких лет. Внимание уделяется запросам крупных платящих клиентов, а не запросам пользователей. Единственный способ привлечь внимание команды — обойти специалистов по маркетингу / менеджменту, занимающихся голосом пользователей, и поговорить с ними напрямую: опубликовать проблемы в их репозиториях на Github или отправить им сообщение в Twitter.