`dotnet build` 和 `dotnet restore` 永远挂起,没有任何错误

Posted

技术标签:

【中文标题】`dotnet build` 和 `dotnet restore` 永远挂起,没有任何错误【英文标题】:`dotnet build` and `dotnet restore` hangs forever without any error 【发布时间】:2021-11-11 22:45:51 【问题描述】:

我在 Windows 10 上安装了带有 .NET5 SDK 的 VS2019。今天它停止工作了。 VS2019 无法构建任何 .NET 项目,不显示任何错误。

我尝试运行dotnet builddotnet restore。它永远挂起,没有任何错误。 Screenshot: dotnet restore hangs forever without any error

今天早些时候,我的 C 盘已满。我将C:\Users\<user>\.nuget 目录移动到D:\Temp\.nuget,并创建了一个连接点mklink /J C:\Users\<user>\.nuget D:\Temp\.nuget。在我调整了我的 C 驱动器的大小后,我将该目录移回了原处。这可能是问题的原因。

我试图卸载我的 .NET 5 SDK,但它不允许我这样做。 Screenshot: .NET 5 SDK was installed with VS2019

我尝试通过手动清理所有内容来重新安装 VS2019。问题依然存在。

在重新安装操作系统之前我可以做些什么吗?谢谢。

【问题讨论】:

SysInternals ProcMon 有时可以帮助找到看起来会导致问题的 IO。否则,克隆 NuGet.Client 存储库并对其进行调试(好的,您需要删除连接并释放足够的磁盘空间来恢复 NuGet 自身需要的包),但是如果您弄清楚它为什么会冻结,那么您可以修复它并向 NuGet 团队发送拉取请求。否则,请在冻结时获取内存转储,并使用 VS 的反馈工具与 NuGet 团队共享内存转储,以便我们进行调查。 另外,当您说“我将那个目录移回”时,这是否也意味着您删除了联结?如果没有,请尝试完全删除~/.nuget。如果您没有具有下载配额的 Internet 连接,则无需备份和恢复其中的文件,因为 NuGet 将在需要该包的第一次恢复时重新下载。 是的,我删除了联结并物理恢复了 .nuget 目录,问题仍然存在。我还重新安装了VS 2019。仍然有问题。我的互联网连接没有问题。由于我不能再在我的 Windows 中使用 .net,我在 WSL 中安装了 .net SDK,现在从那里使用它。 顺便说一句 - 在我重新安装 VS2019 后,我发现 msbuild -t=restoremsbuild 可以工作,但是 dotnet restoredotnet build 仍然永远挂起。 【参考方案1】:

如果您想将 NuGet 的全局包文件夹移动到不同的位置/驱动器,NuGet 具有内置支持,因此无需使用联结:https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file

所以,编辑您的 %appdata%\NuGet\nuget.config 文件,使其看起来像这样:

<configuration>
  <config>
    <add key="globalPackagesFolder" value="d:\Temp\.nuget" />
  </config>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
</configuration>

【讨论】:

以上是关于`dotnet build` 和 `dotnet restore` 永远挂起,没有任何错误的主要内容,如果未能解决你的问题,请参考以下文章

将定义常量传递给 dotnet build 会杀死目标框架符号

dotnet aspnetcore docker build 失败并显示 145 错误代码

dotnet发布命令不适用于aws buildspecs.yml文件中的asp dotnet项目

即使使用 --no-build 标志运行 dotnet test 时如何避免 Wix 构建错误?

docker build 错误 /usr/share/dotnet/sdk/2.1.801/Microsoft.Common.CurrentVersion.targets(2106,5): warni

Appveyor dotnet 发布使用 net core 1.0.0 失败