面对 NuGet 问题“'5.0.0+42a8779499c1d1ed2488c2e6b9e2ee6ff6107766' 不是有效的版本字符串。”在安装软件包时

Facing NuGet issue "'5.0.0+42a8779499c1d1ed2488c2e6b9e2ee6ff6107766' is not a valid version string." while installing packages

我已经创建了一个用于在 C# 中测试 Web 应用程序的框架(控制台应用程序) 所有包都由 Nuget 包管理器管理。当我尝试通过 nuget install/uninstall 包时,我遇到异常(粘贴在最后)。

Tools/Configurations

  1. Visual studio - 社区 2013
  2. .NET Framework - 4.5.2 Selenium
  3. 网络驱动程序 - 3.141.0
  4. MSBuild.NUnit 版本="1.0.2"
  5. NUnit version="3.12.0"
  6. NUnit3TestAdapter 版本="3.15.1" NU
  7. NUnitTestAdapter 版本="2.2.0"

如果有人需要任何其他详细信息,请告诉我。 我查看了与 Nuget 相关的主题,但没有找到任何可以提供一些想法或解决方案的有用主题。

如果您需要任何其他信息,请告诉我 ||请推荐一些ideas/solutions 异常

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

截图

NugetPackageManagerErrorScreenshot

Installed Nuget

您尝试恢复的包(或者在本例中,它的一个依赖项)使用 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 部分下(粗体):

If you upload a SemVer v2.0.0-specific package to nuget.org, the package is invisible to older clients and available to only the following NuGet clients:

  • NuGet 4.3.0+
  • Visual Studio 2017 version 15.3+
  • Visual Studio 2015 with NuGet VSIX v3.6.0
  • dotnet
    • dotnetcore.exe (.NET SDK 2.0.0+)

作为解决方法,您可以下载更新版本的 nuget 命令行工具,然后从命令行手动对您的项目执行 nuget restore

请注意,越来越多的包正在切换到语义版本控制 2.0.0。根据您使用的软件包,您可能会越来越频繁地开始 运行 这个问题。如果可能的话,我建议升级您的 Visual Studio 版本(VS 社区 免费 )。

* 稍后的工具(例如 dotnet pushnuget push)发出了一条有点烦人的警告消息,提醒作者他们的包正在使用 SemVer 2.0.0 并将老客户无法使用。在这种情况下,包作者要么没有意识到这一事实,要么已经确定版本控制方案的好处超过了包消费者的潜在损失。

我设法通过 程序包管理器控制台 .

使 install/uninstall 程序包正常工作

我之前已经尝试过这些步骤,但不确定为什么当时不起作用。

  1. 未安装的 nuget:工具 > 扩展和更新 > 已安装 > Nuget
  2. 重新安装 nuget:工具 > 扩展和更新 > 在线[Visual Studio 图库] > Nuget > 安装
  3. 更改包管理器设置:工具 > Nuget 包管理器 > 包管理器设置 > Nuget 包管理器 > 包源 > 仅选中 "nuget.org",其余所有内容均未选中 > 单击 "Ok"。
  4. 重新启动 VS 2013(如果需要,请重新启动系统。)

编辑 1 : 也可以通过 UI 查看。