Nuget包已安装但引用未解析。

48

我有一个多项目解决方案,在几个项目中安装了Prism Nuget包。然后,我尝试使用Nuget Package Manager UI在其中一个项目中添加一个Prism Mef扩展包(我已经将其添加到另一个项目中)。

第一次尝试添加包时,它未能安装其中一个依赖项,没有特定的错误原因,只是“失败”。因此,我第二次安装它,一切似乎都好,没有报告错误,但是一些引用未解析。

因此,我卸载了包及其所有依赖项,然后再次安装。再次一切看起来都很好,但是更多的引用未解析。

我尝试过多次卸载和安装包,但现在每次都得到相同的结果。

我遇到过这个问题很多次,我知道这不是特定于Prism包的问题,因为我遇到了许多不同的包。

我认为这只是Nuget的一个重大错误,但我希望有人知道一个简单的方法来修复它。我通常在Nuget控制台中更容易成功,但我发现使用它需要更多的努力。

我在网上搜索过,没有找到关于问题原因或解决方法的好说明。

公司里有个人完全拒绝使用Nuget,因为他遇到了很多这些问题,但我决心让它工作!

9个回答

70

在“包管理器控制台”中运行以下命令:

Update-Package -reinstall

这将重新安装该项目中的每个NuGet包,从而解决任何缺失的引用。

如果您知道缺少特定的引用:

Update-Package -reinstall <Package-Name>

1
您可以在问题中看到,我已经尝试重新安装所需的软件包。问题是由于 Visual Studio 中的一个错误引起的,其中引用未正确解析。 - Glen Thomas
我的问题在这里描述:https://developercommunity.visualstudio.com/content/problem/502713/vs2019-nuget-package-installed-but-not-recognized.html https://learn.microsoft.com/en-us/nuget/consume-packages/migrate-packages-config-to-package-reference - juFo

35

我刚刚关闭了 Visual Studio 并重新打开它,参考已经解决了...!


11
Visual Studio及其缓存问题非常烦人。 - Alexander
在花费了几个小时来解决这个问题之后...虽然已经是2019年了,但看起来旧而且丑陋的微软解决方案指南仍然适用:当某些东西无法按预期工作时,只需重新做、启动、安装,它就会正常工作。唉。 - Dankó Dávid
1
我曾经在一个项目中安装单个简单的NuGet包时遇到了类似的问题。对我来说,关闭和重新打开似乎没有帮助,所以最后我使用了“添加引用”-“浏览”,手动定位项目中“packages”文件夹下的包DLL,并将其添加为引用。之后它就正常工作了! - Loophole
我曾经遇到过这个问题,但重启和重新安装都没有解决。对我来说,我所需要做的就是编译程序,然后问题就消失了。 - NiallUK

6

您需要遵循以下步骤。

1. 运行Update-Package -reinstall命令。

2. 重新启动Visual Studio。


重新安装对我来说是关键。在升级我的 .net 框架版本后,我忘记更新我的软件包引用。 - TabsNotSpaces
2
第一步会将所有软件包更新到最新版本。这会导致我的项目出现大量引用错误。只需使用 Update-package -reinstall 安装相同的版本即可。参考链接 - tacticalmovephase

6
你可能需要检查包的.NET版本与你的项目版本是否一致。
我曾经遇到这样一个情况,我的项目是.NET 4.6.1版本,而我想安装的包使用的是4.6.2版本。在将我的项目更新到相同的.NET版本后,引用就出现了。

在这种情况下,您应该在输出窗口中看到一个错误。 - Glen Thomas

3
这是我修复它的方法。
我正在处理一个遗留的.NET Framework项目(使用<Reference Include...而不是PackageReference)。这些.dll是通过未被解析的相对路径引用的。
通过更改为绝对路径,构建,然后再更改回原始的相对路径来修复。
例如:
    <Reference Include="My.Package">
      <HintPath>..\..\packages\My.Package.dll</HintPath>
    </Reference>

转化为中文:

改为:

    <Reference Include="My.Package">
      <HintPath>C:\Users\will\Documents\MySolution\packages\My.Package.dll</HintPath>
    </Reference>

然后重新构建并更改为相对路径,构建仍然成功。


3

从您的.config文件中删除所有<assemblyBinding>引用,然后在Nuget包管理器中运行此命令:

最初的回答

Get-Project -All | Add-BindingRedirect

对我来说,关闭VS,从我的.config文件中删除<assemblyBinding>,然后重新打开解决了这个问题(我本来要按照你的指示操作,但已经关闭了VS,并且不需要运行Get-Project...在重新打开时)。奇怪的是,Nuget包管理器没有列出这些包,但它们现在出现在引用中!我不确定这是如何工作的 >_> VS有时候真是神秘... - Ben

2

我最近在Visual Studio 2012上遇到了这个错误,我的解决方案是从Nuget缓存中删除.nupkg文件。可以从Nuget设置>常规>浏览中找到Nuget缓存位置。

注意:我没有清除缓存,我只是从缓存目录中删除了一个特定的文件,然后重新安装了Nuget包。


0
在我们的情况下,一台机器上的VS仍然保留着一个依赖项的旧版本,因此对于依赖项中新添加的方法的引用无法解析(即使包管理器报告已安装最新版本)。解决方案是在卸载依赖项后重新启动Visual,然后再次安装。

0

我尝试了所有其他选项,但没有解决我的问题。解决问题的方法是访问NuGet网站上的包信息,并检查不同版本的包与.Net Framework的哪些版本兼容。

不幸的是,最新稳定版本的包中没有列出我的.Net Framework版本,所以我卸载了它并安装了倒数第二新的版本,该版本列出了我的.Net Framework版本,并且一切都按预期工作。

简单而出乎意料(至少对我来说)。


如果你有新问题,请点击提问按钮进行提问。如果有需要提供上下文,可以附带这个问题的链接。- 来自审阅 - ryanwebjackson

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