为什么我的.NET类库中所有引用都有黄色感叹号?

26

我已经开发了一个类库很长一段时间了,但突然有一天,上周打开我的项目时,所有引用现在都有黄色的感叹号(System.dll、System.Drawing.dll等)。我尝试删除引用并重新添加它们以修复任何损坏的引用路径,但它们仍然显示黄色的感叹号。

自上次打开项目以来没有更改任何内容。和上次打开项目不同的唯一一件事是,这次我直接从.NET另一个项目中打开了它。例如,我正在一个.NET 3.5 Web项目上工作,然后单击文件->最近打开的文件->我的其他解决方案。这将关闭当前的3.5 Web解决方案并打开2.0类库解决方案,问题第一次出现。我不确定这会导致什么问题,但我倾向于认为Visual Studio混淆了什么,现在我的程序集在这个2.0类库项目上都无效了(?)。

是什么原因导致这种情况发生,如何解决?我在网上看到有人建议删除引用并重新添加它们,但都无济于事。

我考虑开始一个新项目,并逐个复制我的源文件,但如果可能的话,我真的想避免这样做。

提前感谢您的回答!


5
同一个解决方案中,是否有一个项目使用 .Net 2.0,而另一个项目使用 .Net 3.5?并且其中一个项目引用了另一个项目? - user47589
重建它,记录您收到的错误信息。 - Hans Passant
谢谢Amy,我正在添加项目的不同版本。 - Jagz W
13个回答

44

补充一下,最近我遇到了一个问题,我向一个Visual Studio 2008项目添加了目标框架设置为.NET 4.0的引用。结果只会显示一个黄色感叹号和解释。

一旦我意识到我选择了错误的发布二进制文件,问题就显而易见了!


哈,那正是我遇到的问题 - 谢谢。 - pfeds
3
这对我解决了问题——项目配置为.NET 4.5,而我应该将项目配置为.NET 4.5.1。 - Contango

25

使用解决方案资源管理器,在项目名称上单击鼠标右键,选择“卸载项目”,然后选择“编辑(您的 csproj 文件名)”,即可直接在 VS 中编辑 .csproj 文件。

在一个 <ItemGroup> 节点下,您会找到被标记为 Reference 的子节点。确保 HintPath 节点的值指向有效的路径。还要仔细检查 SpecificVersionPrivate 节点的值是否有效。

希望评估这些值可以帮助您解决问题。


1
谢谢你的提示。我按照你说的做了,现在<ItemGroup>里面的一切看起来都正确无误。我只是把所有相对引用(如 '......') 改成了绝对引用(如 'c:'),惊叹号就神奇地消失了。 :) 再次感谢! - Luc
Luc,这样硬编码路径会不会使跨部署变得困难?也许默认设置不正确。它从哪里获取默认的“当前”应用程序路径,我们如何验证和调整它?谢谢。 - FloverOwe

12

检查项目的.NET框架是否等于或大于参考的.NET框架。


1
在这里也遇到了同样的问题;一个.NET 4.5项目引用了一个.NET 4.5.1项目,在我做了这个之前是无法编译的。谢谢! - Matt Borja
其中的一个症状是 IntelliSense 可以识别类型,您可以在 Visual Studio 中编写代码并使用引用库中的类型,但代码无法编译,并且您会看到该引用程序集的黄色感叹号。不幸的是,没有工具提示告诉我们出了什么问题。 - shivesh suman

5

我的问题在于项目中目标.NET框架版本的差异。第一个设置为.NET 4.0,而第二个则是.NET 4.5。 更改后解决了我的问题。


5

最近我在使用Visual Studio 2015打开一个项目时遇到了相同的问题。

当我多次改变解决方案默认包存储库的物理位置,并故意更改NuGet.Config中repositoryPath的值时,出现了这个错误。

在我的情况下,我需要删除一个位于csproj文件的Target部分内,condition属性指向的路径无效的元素。

<Error Condition="!Exists('..\..\..\..\..\Packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" 
       Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\..\Packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />

此外,当常规的Package文件夹被移除或移到其他地方时,也会出现此错误。此时应该更新这个值以及ItemGroups。

2

将两个项目的目标DotNet框架改为相同的版本,所有问题就会得到解决。(特别是如果您进行了“升级”)


正如@reza_baiat所说(我错过了那个)。 - pashute

1
我曾经遇到了与一堆源代码文件上的黄色感叹号相同的问题,这些文件是由TFS检入/维护的。哪些文件实际上有黄色感叹号,哪些没有,并没有规律。通过研究这个问题的原因,我发现那些带有黄色感叹号的文件实际上并没有从TFS下载到我的硬盘上。我检查了.csproj文件中的HintPath等内容,所有内容都看起来很好,也没有其他线程的提示能够帮助我解决这个问题。
最后帮助我的是以下步骤: 在解决方案资源管理器中,右键单击项目->获取特定版本...->(“版本类型:最新版本”已被选中)->+启用复选框“即使本地版本与指定版本匹配,也要覆盖所有文件”->单击“获取”按钮
之后,所有源代码文件都可以成功地从TFS中检索出来,黄色感叹号消失了!我希望这能帮助遇到同样问题的人!

1
我曾经遇到过同样的问题,这是因为我将项目文件夹从另一个项目复制过来,作为新解决方案的起点。
所有项目都引用了这个黄色感叹号,甚至是对框架程序集的引用也一样。
最终帮助我的方法是确保".nuget"文件夹(包括Nuget.Config、NuGet.exe和NuGet.targets)在我的解决方案文件夹中。然后我在解决方案的上下文菜单中执行了"还原Nuget包"。现在所有的感叹号都消失了!

0
问题: 这是我遇到的问题,我正在将我的TFS存储库映射到C:\Users\myUserNameFolder\文件夹下。 “myUserNameFolder”具有特殊权限,因为它是系统文件夹,所以解决方案中引用的dll会出现黄色三角形,每当我尝试重新引用所有dll时,它们仍然会得到相同的黄色三角形标记。 解决方案: 我将我的TFS存储库重新映射到C:\上的普通文件夹,问题得到解决。 希望对某些人有所帮助...

P.S. 这发生在VS 2015中。


0
如果您的.dll文件已经存在于源代码控制中,那么您只需要右键单击解决方案下的依赖项和包文件夹(位于源代码控制资源管理器下),并获取其最新版本即可。
然后您就可以在您的系统上找到.dll文件了。

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