在Visual Studio 2017中,依赖项上的黄色警告三角形代表什么?

209

我刚刚将我的PCL库转换为新的.Net Standard库,现在我的依赖项中出现了黄色警告三角形:

enter image description here

在转换过程中,它将所有NuGet软件包及其依赖项一并复制,因此可能会重复。

如何找出黄色警告三角形代表什么?

编辑

生成日志:

为了防止NuGet在构建期间还原软件包,请打开Visual Studio选项对话框,单击“包管理器”节点并取消选中“允许NuGet在构建期间下载丢失的软件包”。 NU1605:检测到软件包降级:NUnit从3.8.1降级到2.6.4。直接从项目引用软件包以选择不同版本。
MyProj.UI.Tests -> MyProj.Core.Tests -> NUnit (>= 3.8.1)
MyProj.UI.Tests -> NUnit (>= 2.6.4) NU1605:检测到软件包降级:NUnit从3.8.1降级到2.6.4。直接从项目引用软件包以选择不同版本。MyProj.UI.Tests.iOS -> MyProj.UI.Tests -> MyProj.Core.Tests -> NUnit (>= 3.8.1) MyProj.UI.Tests.iOS -> NUnit (>= 2.6.4) NU1605:检测到软件包降级:NUnit从3.8.1降级到2.6.4。直接从项目引用软件包以选择不同版本。
MyProj.UI.Tests.Android -> MyProj.UI.Tests -> MyProj.Core.Tests -> NUnit (>= 3.8.1) MyProj.UI.Tests.Android -> NUnit (>= 2.6.4)


98
@Nkosi 在他们上方悬停对我来说没有显示任何内容。 - JKennedy
1
检查错误窗口然后。 - Nkosi
4
这些引用在构建程序时使用,但对IDE也很重要,因为它需要解析它们以提供智能感知功能。如果解析失败,则会出现警告三角形。请使用“构建”>“构建”获取错误消息。 - Hans Passant
70
当这种情况发生在我身上时,没有生成任何构建警告。警告图标只是停留在用户界面中。卸载和重新加载项目可以解决这个问题。 - StackOverthrow
3
@TKK: 我认为这只持续了几分钟,然后警告三角形出现在用户界面中。至少这就是我重新打开解决方案后发生的事情。一开始我以为它已经修复了,但突然间警告三角形又出现了。 - PussInBoots
显示剩余7条评论
24个回答

193

尽管听起来陈词滥调,但请尝试重新构建并重启 Visual Studio - 然后继续你的工作 :)


16
谢谢您提醒我经典的“尝试重新启动”解决方案: )。过去一小时一直在想为什么我构建解决方案时VS会删除我的包。我重新启动了VS,一切都按预期工作了。/叹气 - Ryan E.
3
经典的“关机”并不总是解决世界上所有不好的事情的解决方案 :/ - sgrysoft
1
我今天刚刚更新了我的Visual Studio 2019到最新版本(16.5.1),但问题仍然存在,不过这个解决方案仍然有效 :) - Willy David Jr
3
我认为VS忘记了使一些缓存失效,这些缓存保留了那个三角形。在NuGet安装失败后,我看到了这个问题,而且在重新构建和VS重启后它确实消失了。 - Alexei - check Codidact
我遇到了同样的问题,通过构建并重新启动VS解决了。我的VS版本是16.11.2。 - ctong
显示剩余9条评论

79

在进行任何复杂操作之前,请运行dotnet restore命令,您将获得比错误窗口或解决方案资源管理器中提供的更多信息。

您可以在程序包管理器控制台中运行此命令:

工具 > NuGet程序包管理器 > 程序包管理器控制台


4
只是重新打开解决方案而不是重启VS也对我有用。 - Quido
1
为什么要进行dotnet restore操作?难道不是由构建过程完成吗? - pabrams
在VS2022中仍存在相同的问题,恢复操作已经解决了它。 - Ricardo stands with Ukraine
dotnet restore 然后重新启动 VS2022 对我来说解决了这个问题。 - Chris Jensen
“dotnet restore” 不是为 Core 应用程序设计的吗?我这么问是因为我正在尝试修复一个 .NET Framework 4.7.1 应用程序,其中有 80 个黄色三角形。查看 Visual Studio 的错误列表中的警告,它们都说“无法解析此引用。找不到程序集”,然后在引用组下的解决方案中列出了该程序集。 - Rod

70

如果你的项目出现了警告图标,但并没有实际的警告信息,也没有发现任何问题,那么可以右键单击该项目 > 卸载项目 > 再次右键单击该项目 > 重新加载项目。这个图标会在 Visual Studio 2019 中短暂地出现,然后被清除。这样可以避免完全重启 Visual Studio。


1
在折腾了一个多小时之后,终于成功了(VS2022)。谢谢。 - entiat
警告:如果您按照此答案的建议操作,所有对该项目的其他项目的引用将会丢失,您将需要重新添加它们。(如果您从一个干净的工作树开始,那么恢复项目文件上的更改就可以了;但如果不是,您将需要做一些工作。) - Mike Nakis

15

黄色的三角形表示软件包的物理文件已丢失,无法从硬盘中获取。

通常情况下,这会在TFS源代码控制中发出“获取最新版本”请求时发生,特别是在使用新计算机并希望从TFS服务器获取项目代码时。

也可能是由于网络连接质量差,几乎总会导致数据丢失或下载的文件损坏。

enter image description here

如果问题只是缺少几个软件包,则可以修改packages.config文件并从nuget packages manager重新安装缺少的软件包。

但是,如果缺失的软件包超过了几个,我用于检索缺失软件包的最佳和快速方法是:

  1. 打开Visual Studio的新实例
  2. 创建一个与缺失软件包的项目类型相同的新项目解决方案(例如:具有单个用户帐户的ASP.Net MVC)
  3. 将新项目的软件包更新为最新版本,以匹配先前项目解决方案的软件包版本
  4. 打开文件资源管理器,导航到你创建的新解决方案中的软件包文件夹
  5. 通过选择所有内容,复制Packages文件夹中的所有内容,注意不要复制文件夹本身,只需复制文件夹内的内容。
  6. 将其粘贴到先前缺少包的解决方案中(即在Packages文件夹中),并覆盖现有项目。
  7. 转到解决方案资源管理器中的包文件夹,展开它,然后单击刷新按钮以查看许多丢失的包现在已经显示,没有黄色三角形了。
  8. 最后,您将得到几个缺失的软件包,这些软件包在创建新解决方案时默认未包含,需要从packages.config文件中删除它们(这是NuGet软件包管理器读取以确定安装软件包的文件),然后使用NuGet软件包管理器将其作为新软件包进行安装。

注意,与项目中缺少文件相关的此类问题总是很难修复,并且取决于开发人员的经验,因此不要期望该问题有简单的解决方案。

关于错误的原因,微软表示这是一个漏洞,但它可能会发生在任何版本的Visual Studio中。


1
关于项目,重新启动 Visual Studio(2019)似乎对我有用。 - Steve Smith
没有packages.coinfig。 - pabrams

15

在构建日志中,我注意到了这个:

C:\Program Files\dotnet\sdk\2.0.2\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.DefaultItems.targets(199,5): warning : 在您的项目中包含了一个'NETStandard.Library'的PackageReference。该包已被.NET SDK隐式引用,因此您通常不需要从您的项目中引用它。有关更多信息,请参见https://aka.ms/sdkimplicitrefs

因此,我卸载了所有列在此处的 .Net Standard nuget 的依赖包。

.NETStandard 1.1
  • Microsoft.NETCore.Platforms (>= 1.1.0)

  • System.Collections (>= 4.3.0)

  • System.Collections.Concurrent (>= 4.3.0)

  • System.Diagnostics.Debug (>=> 4.3.0)

  • System.Diagnostics.Tools (>= 4.3.0)

  • System.Diagnostics.Tracing (>= 4.3.0)

  • System.Globalization (>= 4.3.0)

  • System.IO (>= 4.3.0)

  • System.IO.Compression (>= 4.3.0)

  • System.Linq (>= 4.3.0)

  • System.Linq.Expressions (>= 4.3.0)

  • System.Net.Http (>= 4.3.2)

  • System.Net.Primitives (>= 4.3.0)

  • System.ObjectModel (>= 4.3.0)

  • System.Reflection (>= 4.3.0)

  • System.Reflection.Extensions (>= 4.3.0)

  • System.Reflection.Primitives (>= 4.3.0)

  • System.Resources.ResourceManager (>= 4.3.0)

  • System.Runtime (>= 4.3.0)

  • System.Runtime.Extensions (>= 4.3.0)

  • System.Runtime.InteropServices (>= 4.3.0)

  • System.Runtime.InteropServices.RuntimeInformation (>=> 4.3.0)

  • System.Runtime.Numerics (>= 4.3.0)

  • System.Text.Encoding (>= 4.3.0)

  • System.Text.Encoding.Extensions (>= 4.3.0)

  • System.Text.RegularExpressions (>= 4.3.0)

  • System.Threading (>= 4.3.0)

  • System.Threading.Tasks (>= 4.3.0)

  • System.Xml.ReaderWriter (>= 4.3.0)

  • System.Xml.XDocument (>= 4.3.0)

黄色警告消失了。

来自这里:https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-net-standard-2-0/

我还发现您可以像下面这样使用NoWarn属性:

<ItemGroup>
  <PackageReference Include="Huitian.PowerCollections" Version="1.0.0" NoWarn="NU1701" />
</ItemGroup>

10

对于任何遇到此问题的新人:尝试这个方法,你会记得我的:D

前往:工具 > NuGet管理员 > 配置 并验证已选择 允许NuGet...自动检查...

之后,您唯一需要做的就是点击"清除所有NuGet缓存"按钮!

就是这样。 您不必手动编辑任何内容,那样可能很危险,相信我,我曾经需要执行此处描述的某些步骤很多次。

如果您想尝试此问题的官方Microsoft解决方案,可以在此处进行检查:https://learn.microsoft.com/es-es/nuget/consume-packages/package-restore#restore-packages-automatically-using-visual-studio

但只需清理缓存即可解决所有问题。


5
在VS2019中,这些菜单的名称似乎在“工具”->“NuGet程序包管理器”->“程序包管理器设置”下。 - Issung

7

-卸载项目

-加载项目

这对我有用。


6

我刚在VS2019版本16.8.3上遇到了这个问题,当我重命名一个.NET Core 3.1项目后,黄色三角形标志就出现了。尝试重新构建、清理等操作都没有起作用。关闭并重新打开解决方案对我有帮助。


这正是我在使用VS2022 17.1.0时遇到的情况,关闭并重新打开Visual Studio即可解决。谢谢。 - Bob

4
有趣的是,我的 .Net Core 3 项目只需要在项目上下文中简单点击“加载项目依赖项”,然后警告图标就会消失。
有用的截图: enter image description here

4
黄色感叹号通常是由于缺失引用或不支持的dll文件引起的。如果您克隆了一个代码库,那么很可能会出现许多NuGet包显示黄色感叹号的情况。如果您已经确认了项目版本,但仍然存在问题,您可以尝试以下解决方案。
在包管理器控制台中,选择您遇到此问题的项目,然后键入以下命令。
Update-Package -Reinstall

这将强制重新安装所有包。该命令不会更新NuGet包的版本,它只会强制重新安装它们。

在我的情况下,这个解决方案有效。我正在使用VS2019。希望这也能帮助其他人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接