NuGet无法识别已安装的软件包。

25

我在Git上有一个C#项目,使用了NuGet的库。一切都很正常,但是当我在一个新机器上拉取并在Visual Studio中打开该解决方案时,由于引用错误而无法编译。如果我单击项目下的引用,可以看到黄色感叹号的经典警告标志。

NuGet还原不会做任何事情(我仍然没有找到这个功能的任何用处...),文件repositories.config也很好。如果我右键单击解决方案,然后选择“管理解决方案的NuGet包”,则不显示已安装的包。

迄今为止,我是这样解决的:运行

Install-Package package_name
"它说:"
'package_name' already installed.
My_project already has a reference to 'package_name'.

...然后显示在管理器上的软件包,已分配到正确的项目。


在任何代码中都没有改变,我可以看到这一点,因为Git上没有差异。

我只需要在新机器上执行一次,但这真的很令人烦恼。有什么想法吗?


NuGet版本:2.8.60318.667


更新 27/07

我在另一台PC上从头开始尝试了该过程,使用的是Windows 10,并且一切正常...与Visual Studio、NuGet等相同的版本...我感到困惑。


你正在选择正确的 软件包源 吗? - Rahul
另外,请确保尝试清理软件包缓存。我之前也遇到过这种情况。 - JuanR
@Rahul 我不太明白你在问什么。 - git_gud
@Juan 我做了,但没有解决任何问题。 - git_gud
@confusedandamused,正如你所建议的那样,这些包已经被正确地通过.gitignore跳过了。 - git_gud
显示剩余5条评论
6个回答

10
这可能是由于您的.csproj文件中.dll路径不正确导致的。包恢复会将软件包下载到本地目录,但不会更改.csproj文件中程序集的引用路径,这意味着项目仍然会尝试在本地目录中定位dll文件。黄色标记表示该项目无法定位程序集。
请卸载该项目,右键单击该项目并选择“编辑.csproj”,并验证缺失dll文件的路径。例如 - 如果您有NUnit,则应该在.csproj文件中找到类似于以下内容的行:
<Reference Include="nunit.framework">
      <HintPath>..\packages\NUnit.3.6.1\lib\net45\nunit.framework.dll</HintPath>
</Reference>

请确认dll文件是否存在于"\packages\NUnit.3.6.1\lib\net45"目录中。


这帮助我解决了我的问题。我无法重新安装Nuget包,因为它说已经安装了,所以我从packages.config中删除了该包,然后Nuget让我重新安装它。之后就可以工作了。 - Rich

9

从我的角度来看,我可以想到一些包未被下载的原因,理想情况下,您需要分享更多详细信息。

首先,install-package命令不起作用。您的软件包已经安装,但VS无法下载它们,所以您会收到该错误。

  • 首先,这是nuget.org上托管的公共包,例如System.MVC.Web吗?因为如果这是在新机器上使用私有nuget服务器,则需要在“工具”>“选项”>“Nuget包管理器”>“包源”中配置该源。(有关更多详细信息,请参见https://learn.microsoft.com/en-us/nuget/tools/package-manager-ui
  • 检查是否已将文件夹添加到git存储库中,但同时设置了其内容的排除。要检查此内容,请查看干净的检出时文件夹是否存在但为空。如果是这种情况,只需删除文件夹,git ignore应该从现在开始发挥作用,并且每个新克隆都将进行适当的检查。
  • 如果以上两种情况(最有可能导致问题的情况)都不起作用,请尝试从包管理器控制台还原软件包,并更新您的帖子以获取详细信息。

您可以打开“包管理器控制台”并键入:

Update-Package -reinstall

或者
Update-Package -reinstall -Project YourProjectName

提醒一下,微软有一份全面的文档 https://learn.microsoft.com/en-us/nuget/consume-packages/package-restore,介绍了多种恢复NuGet包的方法。


  1. 是的,只是举个例子:'Newtonsoft.Json'。这些源已经默认配置在www.nuget.org/api/v2/上了。
  2. 包文件夹为空,只有repositories.config文件引用其他repositories.config文件,这些文件特定于解决方案中包含的每个单独项目。我有一个.gitignore文件来忽略文件夹并仅保留.config文件。这部分似乎正常工作。
- git_gud
@SOROMEED 我认为这可能是问题所在。如果您在解决方案中启用了包还原,则不需要那个repositories.config文件。在理想的情况下,您的packages文件应该为空,还原将遍历所有项目并还原所需的软件包。因此,请尝试删除该文件夹。FYI https://dev59.com/yGgu5IYBdhLWcg3wnYLo - rjso
有趣,我不太明白为什么这种方法行不通,但我会尝试你的方式,即使我不喜欢nuget restore。 - git_gud

2
我已经解决了这个问题。按照以下步骤进行操作:
  1. 在Visual Studio中,单击工具 > 扩展和更新
  2. 导航到在线,搜索"NuGet Package Manager for Visual Studio"并单击更新
  3. (如果没有更新按钮,请导航到更新 > Visual Studio Gallery,找到 "NuGet Package Manager for Visual Studio" 并单击更新。)
  4. 然后重新启动Visual Studio。

我已经尝试过了,但它并没有解决问题。正如您所看到的,我的NuGet版本已经更新到今天最新可用的版本。 - git_gud
正如您所看到的,我的NuGet版本已经更新到今天最新可用的版本。但实际上,您展示的是2.8.*,那已经非常老旧了。请问您正在运行哪个版本的Visual Studio? - Jon Skeet
啊,VS 2012,我现在看到标签了。你能否升级到更高版本的Visual Studio?有些工具可能依赖于更新的NuGet版本,这可能意味着需要更高版本的VS。 - Jon Skeet
不,我无法升级我的Visual Studio版本。 - git_gud

2
尝试从以下 NuGet 缓存文件夹中删除您的软件包,以便强制 NUGET 从源下载:
C:\Users\<<您的用户名>>\.nuget\packages
"Original Answer" 翻译成 "最初的回答"。

2

我今天遇到了这个问题,升级到最新版本的VS 2017(15.8.7)没有任何帮助。

请检查您的packages.config文件,看看您的packages标签是否像这样:

<packages xmlns="urn:packages">

如果是这样,请删除xmlns属性,使其变成如下格式:
<packages>

这对我来说解决了问题!


0

即使将其安装在解决方案级别,根据您的默认设置,您可能仍需要选择要在其中可用的项目。这就是我的问题。

enter image description here


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