Столкнувшись с проблемой NuGet "'5.0.0+42a8779499c1d1ed2488c2e6b9e2ee6ff6107766' не является допустимой строкой версии". при установке пакетов
Я создал платформу для тестирования веб-приложений на C#(консольное приложение). Все пакеты управляются менеджером пакетов Nuget. Когда я пытаюсь установить / удалить пакеты через nuget, я сталкиваюсь с исключением (вставлено в конце).
Инструменты / конфигурации
- Visual studio - Сообщество 2013
- .NET Framework - 4.5.2 Selenium
- webdriver - 3.141.0
- MSBuild.NUnit version="1.0.2"
- Версия NUnit ="3.12.0"
- NUnit3TestAdapter version="3.15.1" NU
- NUnitTestAdapter version="2.2.0"
Дайте мне знать, если кому-нибудь понадобятся другие подробности. Я просмотрел темы, связанные с Nuget, но не нашел ни одной полезной темы, которая могла бы дать какую-либо идею или решение.
Дайте мне знать, если вам понадобится дополнительная информация || Пожалуйста, предложите несколько идей / решенийИсключение
PM> '5.0.0+42a8779499c1d1ed2488c2e6b9e2ee6ff6107766' is not a valid version string.
Parameter name: version
At line:1 char:50
+ '5.0.0+42a8779499c1d1ed2488c2e6b9e2ee6ff6107766' is not a valid versi ...
+ ~~
Unexpected token 'is' in expression or statement.
PM>
PM> Install-Package NuGet.Frameworks -Version 4.7.0
Install-Package : '5.0.0+42a8779499c1d1ed2488c2e6b9e2ee6ff6107766' is not a valid version string.
Parameter name: version
At line:1 char:1
+ Install-Package NuGet.Frameworks -Version 4.7.0
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Install-Package], ArgumentException
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackag
eCommand
PM> uninstall-package Microsoft.TestPlatform.TranslationLayer -version 16.6.1
uninstall-package : '5.0.0+42a8779499c1d1ed2488c2e6b9e2ee6ff6107766' is not a valid version string.
Parameter name: version
At line:1 char:1
+ uninstall-package Microsoft.TestPlatform.TranslationLayer -version 16 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Uninstall-Package], ArgumentException
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.UninstallPack
ageCommand
PM> nuget update -self
nuget : The term 'nuget' is not recognized as the name of a cmdlet, function, script file, or
operable program. Check the spelling of the name, or if a path was included, verify that the path
is correct and try again.
At line:1 char:1
+ nuget update -self
+ ~~~~~
+ CategoryInfo : ObjectNotFound: (nuget:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Скриншоты
2 ответа
Пакет, который вы пытаетесь восстановить (или, в данном случае, одна из его зависимостей), использует управление версиями SemVer 2.0.0, на что указывает здесь значок+
за которым следуют метаданные сборки в номере версии.
К сожалению, диспетчер пакетов, включенный в Visual Studio 2013, не поддерживает SemVer 2.0.0. Он изначально поддерживается только VS2017 15.3+ (и VS2015 со специальным расширением). Пакеты, использующие семантическое управление версиями 2.0.0, будут фактически скрыты от старых клиентов, таких как VS 2013.*
Из документации Nuget Package Versioning в разделеSemantic Versioning 2.0.0
(жирная мина):
Если вы загрузите пакет, специфичный для SemVer v2.0.0, на nuget.org, этот пакет будет невидим для старых клиентов и доступен только для следующих клиентов NuGet:
- NuGet 4.3.0+
- Visual Studio 2017 версии 15.3+
- Visual Studio 2015 с NuGet VSIX v3.6.0
- dotnet
- dotnetcore.exe (.NET SDK 2.0.0+)
В качестве обходного пути вы можете загрузить более новую версию инструмента командной строки nuget и затем выполнить nuget restore
против вашего проекта из командной строки вручную.
Обратите внимание, что все больше и больше пакетов переходят на семантическое управление версиями 2.0.0. Вы можете начать сталкиваться с этой проблемой все чаще, в зависимости от используемых вами пакетов. Я бы посоветовал обновить вашу версию Visual Studio, если это вообще возможно (VS Community бесплатное).
* Более поздние инструменты (например, dotnet push
а также nuget push
), который предупреждает автора о том, что их пакет использует SemVer 2.0.0 и будет непригоден для использования более старыми клиентами. В данном случае авторы пакета либо не обращают внимания на этот факт, либо определили, что преимущества схемы управления версиями перевешивают потенциальную потерю потребителей пакета.
Каким-то образом мне удалось заставить пакет установки / удаления работать через консоль диспетчера пакетов.
Я пробовал эти шаги раньше, но не уверен, почему тогда это не сработало.
- Неустановленный nuget: Инструменты> Расширения и обновления> Установлено> Nuget
- Переустановил nuget: Инструменты> Расширения и обновления> Онлайн [Галерея Visual Studio] > Nuget > Установить
- Изменены настройки диспетчера пакетов: Инструменты> Диспетчер пакетов Nuget> Параметры диспетчера пакетов> Диспетчер пакетов Nuget> Источники пакетов> Проверено только "nuget.org", все остальное не отмечено> Нажмите "ОК".
- Перезагрузите VS 2013(перезагрузите систему, если хотите.)
Изменить 1: также можно видеть через пользовательский интерфейс.