【问题标题】:How to fix all Nuget references in a .net core solution quickly?如何快速修复 .net 核心解决方案中的所有 Nuget 引用?
【发布时间】:2019-12-05 09:47:39
【问题描述】:

我发现这是一个常见问题,当我从 Github 下载 .NET 存储库时,解决方案缺少参考。请参阅下面的示例。使用 Nuget 包管理器时,它说已经安装了包。包文件夹丢失。

我尝试使用 'Update-Package -reinstall' 并得到一堆行 'No package updates are available from the current package source for project 'project name'.... 这可能是由于缺少包文件。

我可以手动修复每个引用,但这是一个耗时的过程。有没有办法使用“聪明”知道该怎么做的命令或工具一次性强制修复所有项目中的所有这些引用?我正在使用 Visual Studio 2019 16.3 预览版 1

【问题讨论】:

  • 评论两点,packages文件夹仅供packages.config项目使用。 SDK 风格的项目(这是 SDK,因为它在树中有一个“依赖项”节点,而不是“引用”)仅支持 PackageReference,它不使用包文件夹。 Update-Package -reinstall 也只支持packages.config,所以它什么都不做。
  • 删除obj文件夹并重新打开解决方案
  • 嗨托尼,这个问题的任何更新:)
  • 我所做的是手动删除其中一个引用并将其添加回来,突然其余的都得到了修复。感谢您发布的信息。
  • 请验证根文件夹中的 NuGet.config。确保 节点内的键值对正确。如果没有请添加 api.nuget.org/v3/index.json" />

标签: visual-studio nuget visual-studio-2019 nuget-package-restore


【解决方案1】:

在 VS2019 中,那些 .net 核心项目或 .net 标准项目使用 PackageReference 而不是 packages.config 格式来管理 nuget 包。而这样一来,xx.csproj 中的内容就类似于这样:

<ItemGroup>
    <PackageReference Include="FluentValidation" Version="8.1.3" />
    <PackageReference Include="MediatR" Version="6.0.0" />
    <PackageReference Include="AutoMapper" Version="8.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.3" />
    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.2.0" />
  </ItemGroup>

每次下载使用 packageReference 格式的项目时,您只会得到 xx.csproj 和相关的源文件,但没有 nuget 包。因此,当您在 VS IDE 中打开并加载解决方案或项目时,它会在 solution explorer 中显示 nuget packages 名称,但使用 yellow warning triangle,因为现在 VS 无法在本地找到这些包。

有没有办法强制修复所有项目中的所有这些引用 一口气使用“聪明”知道要做什么的命令或工具 怎么办?

就像 zivkan 在他的回答中所说,NuGet 通常配置为在您启用这两个选项时自动恢复包。 每次我们加载灵魂时在IDE中,它会自动为我们恢复包。不确定为什么它似乎无法在您的机器上运行,但您可以检查并尝试:

1.转到Nuget Package Manager=>Package Sources,确保您已将https://api.nuget.org/v3/index.json 设置为Available Package sources. 之一

2.右键Solution Explorer中的解决方案,选择Restore Nuget Packages为整个解决方案恢复包。

3.或者您可以卸载并重新加载项目以检查它是否有帮助。

4.默认情况下,包存储在C:\Users\xxx\.nuget\packages文件夹,您可以检查这些文件夹是否存在。

(我删除了那个文件夹中的所有包,所以当我在VS中打开git解决方案时很清楚,nuget正在自动安装那些必要的包,我不确定是否有可能导致安装了太多的包,所以需要一些时间?我检查并发现,to restore necessary packagesNorthWind 解决方案,它需要超过 370 MB 的包)

我尝试使用 'Update-Package -reinstall' 并得到一堆行 with '当前包源中没有可用的包更新 对于项目'项目名称'....这可能是由于缺少 打包文件。

Update-Package -reinstall在项目中不能正常工作的原因,可能是类似nuget issue #4103的问题,对于xx.c​​sproj中的packagereference,目前有几个命令不支持。

在我检查我的机器后,该命令显然对PackageReference-format .net 标准项目不起作用。当我安装了相关的包成功,我运行这个命令但只得到No package updates are available from the current package source for project xxx,然后我删除安装的包,清理缓存并再次运行命令,我仍然收到相同的消息!

所以我觉得这个命令无法识别.csproj中的PackageRefernece格式,不管我是否安装相关包,它总是会抛出消息No package updates are available ...

【讨论】:

  • 我在配置为运行 asp.net 核心的 CentOS VPS 服务器上使用 Git,在本地 PC 上提交后,我在服务器上提取更改并构建项目使用dotnet 命令行,在这种情况下如何修复引用?
【解决方案2】:

NuGet 通常配置为自动恢复包。请参阅选项页面。第二个包还原选项“在 Visual Studio 中构建期间自动检查丢失的包”在全新安装时默认启用。

这是我录制的一段小视频,记录了我打开解决方案时机器上发生的情况。请留意窗口左下方的状态栏。

如果您安装的 Visual Studio 在启用自动还原选项的情况下表现不同,那么您的计算机上还有其他问题,但我们没有从您的问题中获得足够的信息,截至我写了这个。

【讨论】:

  • 这两个选项已经启用。我已经在手动进行更新包,所以这些选项无论是关闭还是打开都没有效果。
  • @Tony_Henrich 在这种情况下,你没有提供足够的信息让我帮忙。您的 VS 是否在状态栏中收到“恢复完成”消息? “包管理器”输出是否包含任何消息?从命令行恢复会给出任何消息吗?你的obj/project.assets.json 有错误部分吗?您的问题中的“手动修复”是什么意思?
猜你喜欢
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多