无法使用慢速(玻利维亚)互联网为 Mac 和 dotnet 核心恢复 Visual Studio 中的 nuget 包

Unable to restore nuget packages in Visual Studio for Mac & dotnet core with slow (Bolivian) internet

我在为玻利维亚的 dotnet core 2.0 项目恢复包时遇到问题。回到荷兰的家,我恢复包裹没有问题,但在这里它坏了。

我遇到了很多错误,例如:

Failed to download package 'System.Linq.4.1.0' from
'https://api.nuget.org/v3-flatcontainer/system.linq/4.1.0/system.linq.4.1.0.nupkg'.
An error occurred while sending the request
  Error: SecureChannelFailure (Unable to write data to the transport connection: Cannot access a disposed object.
  Object name: 'System.Net.Sockets.Socket'..)
  Unable to write data to the transport connection: Cannot access a disposed object.
  Object name: 'System.Net.Sockets.Socket'..
  Cannot access a disposed object.
  Object name: 'System.Net.Sockets.Socket'.
Unable to load package 'System.Linq'.

当我尝试 wget 这个文件时,我得到的结果在 400 KB/s 和 3 MB/s 之间。

我认为它是 nuget 并行恢复包,这会导致旅舍互联网被充分利用?我已经在不同的 Hostels/Cafe 中尝试过,但我遇到了同样的问题。当我远程桌面进入我在荷兰的家庭服务器并恢复同一项目的包时,一切顺利。

我在这里有哪些选择?我尝试用谷歌搜索这个问题一段时间,但我还没有找到解决方案。

谢谢!

约里克

我无法帮助解决网络问题,但作为一种可能的解决方法,您可以减少 Visual Studio 为 Mac 下载的 NuGet 包的数量。这可以通过使用 NuGet 回退文件夹为 .NET Core 2.0 项目完成:

/usr/local/share/dotnet/sdk/NuGetFallbackFolder/

后备文件夹包含许多 .NET Core 2.0 默认使用的 NuGet 包。如果您安装 .NET Core SDK,则应创建此文件夹。

使用上述文件夹会阻止大量 NuGet 包的下载。

您可以直接将其添加为 NuGet 包源或编辑您的 ~/.config/NuGet/NuGet.Config 文件并添加后备文件夹,如下所示:

或者,您可以在 ~/.config/NuGet/NuGet.Config 文件中添加一个明确的后备文件夹:

<fallbackPackageFolders>
  <add key="DotNetCore2FallbackFolder" value="/usr/local/share/dotnet/sdk/NuGetFallbackFolder" />
</fallbackPackageFolders>

Visual Studio for Mac 需要重新启动。还要检查该文件夹是否存在。

请注意,由于 Visual Studio 的另一个错误,Mac 在恢复 .NET Core 项目时仍会下载一些 NuGet 包。

What are my options here? I tried googling this problem for a while, but I haven't found a solution yet.

很明显,这个错误的原因是网络问题,但是,正如马特所说,我们无法为您提供太多网络问题的帮助。我想提供另一种解决方法:

由于 nuget 默认从本地包缓存中恢复包,您可以在荷兰的家庭服务器中成功恢复包:

您可以从您的家庭服务器复制这些包并将它们添加到本地包缓存中 C:\Users\username\.nuget\packages 到您在玻利维亚的计算机。

希望对您有所帮助。

您也可以尝试使用 Nuget 参数 -DisableParallelProcessing 禁用并行恢复多个包。

看这里:https://docs.microsoft.com/en-us/nuget/tools/cli-ref-restore

这很可能是 Mono 运行时错误,报告如下: https://github.com/mono/mono/issues/19893

解决方法确实是通过将 /p:RestoreDisableParallel=true 属性 传递给 MSBuild 来禁用并行恢复。