.Net 2015中依赖Nuget包的可移植库出现黄色三角标记的参考文献

31

我知道这个问题之前已经被问过了,但是建议的解决方法都对我不起作用,所以我打算再问一遍,希望能得到新的建议。我读过一些文章:

VS .Net References with yellow triangle Why do I get a warning icon when I add a reference to an MEF plugin project? The exclamation mark in the yellow triangle icon (inside Solution Explorer)

我的5个可移植库肯定都针对相同的框架(我已经检查和重新检查过,因为这是其中一个建议!):

  • .NET Framework 4.5
  • ASP.NET Core 1.0
  • Windows Phone 8
  • Windows Phone 8.1
  • Windows Phone Silverlight 8
  • Xamarin.Android
  • Xamarin.iOS
  • Xamarin.iOS(传统)

我尝试/已经做了以下事情:

  • 从所有项目中手动删除Nuget包引用。
  • 检查每个 .csproj 文件,确保引用确实被删除了。
  • 删除解决方案根目录中的 packages 文件夹
  • 尝试通过控制台管理器重新安装所有包。没有错误,但是黄色三角形仍然显示。
  • 尝试通过Nuget管理器重新安装所有包。没有错误,但是黄色三角形仍然显示。

以下是我的一个可移植类库的 代码段:

<ItemGroup>
    <Reference Include="crypto">
      <HintPath>..\..\..\packages\Portable.BouncyCastle.1.8.1\lib\portable-
        net4+sl5+wp8+win8+wpa81+MonoTouch10+MonoAndroid10+xamarinmac20+xamarinios10
        \crypto.dll
      </HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json">
  <HintPath>..\..\..\packages\Newtonsoft.Json.8.0.3\lib\portable-
      net40+sl5+wp80+win8+wpa81\Newtonsoft.Json.dll
  </HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="System.Net.Http">
  <HintPath>..\..\..\packages\Microsoft.Net.Http.2.2.29\lib\portable-
      net40+sl4+win8+wp71+wpa81\System.Net.Http.dll
  </HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="System.Net.Http.Extensions">
  <HintPath>..\..\..\packages\Microsoft.Net.Http.2.2.29\lib\portable-
      net40+sl4+win8+wp71+wpa81\System.Net.Http.Extensions.dll
  </HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="System.Net.Http.Primitives">
  <HintPath>..\..\..\packages\Microsoft.Net.Http.2.2.29\lib\portable-
      net40+sl4+win8+wp71+wpa81\System.Net.Http.Primitives.dll
  </HintPath>
  <Private>True</Private>
</Reference>

我的物理项目路径是:

C:\ xxxx \ xxxxxx \ xxxxx-xxxxxxx

所以以bouncycastle为例,基于上述内容,我认为完整的路径应该是:

C:\ xxxx \ xxxxxx \ xxxxx-xxxxxxx \ packages \ Portable.BouncyCastle.1.8.1 \ lib \ portable-net4 + sl5 + wp8 + win8 + wpa81 + MonoTouch10 + MonoAndroid10 + xamarinmac20 + xamarinios10 \ crypto.dll

这似乎只是我的可移植库上的问题,因为我已经重新安装了uwp解决方案中的所有Nuget包,并且它们都按预期工作。令人沮丧的是,位于其原始位置的我的项目正常运行。我已经卸载并重新安装了这些包,一切都像预期的那样100%工作。

是否有其他建议?


如果您选择带有感叹号的库并检查属性窗格,它会告诉您任何有用的信息吗? - Gusman
请查看“错误列表”窗口,有时IntelliSense解析器会提供有用的警告。 - Hans Passant
@Gusman - 没有什么特别的,但我已经将其与我的工作项目进行了比较,奇怪的是,在工作项目中,“复制本地”和“特定版本”都设置为true,而在非工作项目中,这两个属性都设置为false。此外,“运行时版本”和“版本”属性在工作副本中设置,但在另一个副本中没有设置!我会尝试将“复制本地”和“特定版本”更改为true,但我认为实际情况可能不止于此。 - Thierry
嗯,那可能是因为它根本无法加载。正如所引用的文章所述,通常是因为选择了错误的目标框架。我看到你已经检查过了,但测试所有可用的可能性仍然值得一试,只需选取一个存在问题的项目并尝试更改框架版本和 PCL 配置文件,这是你最好的选择。 - Gusman
@Gusman,我解决了!我现在会发布答案。 - Thierry
显示剩余4条评论
8个回答

66

如果安装过程中没有出现任何输出错误,构建/重新构建时也没有警告。那么只需:

  1. 重新启动 Visual Studio

19
你开什么玩笑啊……我整个下午都在追踪Core 1.0的问题,当我重新启动VS后,我的所有引用都很好地加载了进来。 - Rikon
4
很抱歉听到你的倒霉遭遇!我也数不清有多少次和你情况一样了…最近我养成了一些习惯,如定期关闭选项卡和环境。这可以防止出现像这样的难题,而且我发现我的电脑运行得更好了。 - pim
2
刚刚帮我处理了BuildBundlerMinifier包。 - Sergi0
@Sergi0 同感。还有 JwtBearer... 重启 IDE 就好了。我喜欢我的 Chrome 标签页和应用,@pimbrouwers!请不要把它们拿走! :-( - adamgede
1
@adamgede 很高兴听到这篇文章对你有所帮助。我在评论中应该更清楚地表达。当我说“tabs”时,我指的是VS Tabs。当我说“environments”时,我指的是我打开的各种VS实例。 - pim
显示剩余5条评论

23

我知道问题出在哪了!

就像我告诉 @Gusman 的那样,我的警告开关关闭了。一旦我打开它们,我就得到了以下显示的便携式项目:

Warning: IDE0006 - Error encountered while loading the project. Some project
features, such as full solution analysis for the failed project and projects
that depend on it, have been disabled

并且它提供了一篇文章的链接Diagnosing Project System Build Errors

按照所提供的说明,检查了许多以designtime.log结尾的文件后,我注意到所有这些文件都有一个引用Nuget包的FAIL,但是正如所提到的,我已经从我的各个项目中删除了所有Nuget包。因此,我去重新检查其中一个的.csproj时,发现了问题!

实际上存在两个问题:

  1. Microsoft.BCL.Build Nuget引用没有正确删除!!

  2. 重新添加Microsoft.BCL.Build Nuget包时,.csproj未能正确设置路径

以下是一个错误示例:

<Import Project="..\..\..\packages\Microsoft.Bcl.Build.1.0.21
       \build\Microsoft.Bcl.Build.targets" Condition="Exists
       ('..\..\..\packages\Microsoft.Bcl.Build.1.0.21
       \build\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <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'))" />
    <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'))" />
</Target>

你可以看到第一行,即<Import Project = "..\ ..\ ..\ packages \ Microsoft.Bcl.Build.1.0.21>不应该存在,但它似乎仍然出现在项目中,即使已经删除了Microsoft.BCL.Build

如果需要它,请保留并修复第二个条目,就像我所做的那样。你可以看到有两个条目检查Microsoft.BCL.Build Nuget包。在我的情况下,我只是删除了第一个:

`<Error Condition="!Exists('..\packages\`

并保留了这一个:

`<Error Condition="!Exists('..\..\..\packages\`

编辑完.csproj文件后,我重新加载了解决方案中的项目,不仅Microsoft.BCL.Build问题解决了,而且所有标有黄色三角形的Nuget依赖项也解决了。

虽然我在这个问题上浪费了大部分时间,但希望这能帮助其他人。


长话短说,检查一下你的项目文件,确保没有任何东西阻止构建。我的文件中有一个已经被删除的悬而未决的 Antlr 运行时要求。 - nh43de
这是解决我的问题的方法 :P - Gustavo Baiocchi Costa

8

我在使用vs2017创建了两个DotNetCoreApp 1.1框架的项目时,也遇到了同样的问题。所有我的程序包都显示出感叹号/黄色三角形提示符。当我以管理员身份运行vs2017时,问题得到解决。


2
您可以在这里查看我对相关主题的答案,因为这个主题的答案是一种危险的方式,特别是如果您在生产环境中有一个项目:https://dev59.com/BlYN5IYBdhLWcg3w1LIG#59704420

仅供文档目的,对于遇到此问题的新人尝试以下操作,您将记住我:D

如果您进入:工具 > NuGet管理器 > 配置。并且您已经选中了“允许nuget....”和“自动检查....”。

唯一需要做的就是单击按钮“清除所有NuGet缓存”

就这样,您不必手动编辑可能很危险的内容,相信我,我曾经需要完成描述在这里的步骤很多次,并尝试过5个以上的官方微软文档步骤来解决这个问题,您可以在此处查看: https://learn.microsoft.com/es-es/nuget/consume-packages/package-restore#restore-packages-automatically-using-visual-studio

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


2

当我从GitHub克隆项目到我的笔记本电脑时,我遇到了同样的问题。我的EntityFramework和AspNet.Identity也显示着黄色的三角形警告。在我的情况下,我解决问题所做的是删除包文件夹(其中包含Nuget包),并在打开项目后恢复包。结果,在我重新启动VS2017后,这些警告被关闭了。


1

1

我知道这是一个旧帖子,但最近在更换笔记本电脑后,我一直遇到那个警告错误。我在Visual Studio 2017中使用TFS获取了代码后,突然所有的引用都出现了警告图标。我发现对我有用的方法是:进入对象浏览器,然后选择组合框“所有组件”,最后选择你的框架。对我来说,这个方法非常有效。

Resolve warning references error


0
  1. 将项目文件复制到另一个文件夹中
  2. 删除包含该解决方案的文件夹
  3. 创建同名的新项目
  4. 将步骤1中的文件复制到新项目中
  5. 恢复软件包

这是哪一年?有时候这样做是可行的。这意味着项目还不够成熟。 - Juan Carlos

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