nuget 无法识别已安装的软件包

Posted

技术标签:

【中文标题】nuget 无法识别已安装的软件包【英文标题】:nuget doesn't recognize installed packages 【发布时间】:2017-07-14 13:46:05 【问题描述】:

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

Nuget restore 不会做任何事情(而且我还没有发现这个功能的任何用途......),文件 repositories.config 很好。如果我右键单击解决方案,然后“管理解决方案的 NuGet 包”,则不会显示已安装的包。

直到今天我都是这样解决的:运行

Install-Package package_name

上面写着:

'package_name' already installed.
My_project already has a reference to 'package_name'.

...然后它会在 Manager 上显示已分配给正确项目的包。

任何地方的代码都没有改变,我可以看到,因为在 Git 上没有任何差异。

我只需要在新机器上做一次,但它真的很烦人。有什么想法吗?

NuGet 版本:2.8.60318.667

更新 27/07

我在另一台装有 Windows 10 的 PC 上从头开始尝试了该过程,一切正常……相同版本的 Visual Studio、NuGet 等……我很困惑

【问题讨论】:

您是否选择了正确的包源 另外,请确保您尝试清理包缓存。我以前也遇到过这种情况。 是的,如果您进入源代码管理资源管理器并看到包文件夹已添加 - 将其删除并重新拉取,它应该重建并重新定位包就好了 - 您也可以使用 .tfignore 或一个 .gitignore 文件以强制包文件夹不包含在提交中 我之前在安装包损坏时也看到过这种情况,这种情况的解决方案是卸载然后重新安装,不幸的是没有修复选项 @Rahul 我不明白你在问什么 【参考方案1】:

这可能是因为 .csproj 中的 .dll 路径不正确。包还原将包下载到本地目录。它不会更改 .csproj 中程序集的引用路径,这意味着该项目仍将尝试在本地目录中查找 dll。黄色标记表示项目无法找到程序集。

卸载项目,右键项目并选择“编辑.csproj”,并验证丢失的dll的路径。例如 - 如果你有 NUnit,

<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 让我重新安装它。之后工作。【参考方案2】:

从我的脑海中,我可以想到一些未下载软件包的原因,理想情况下,您必须分享更多详细信息。

首先 install-package 命令不起作用。您的软件包已经安装 VS 无法下载它们,因此您收到该错误是有道理的。

首先,这是一个托管在 nuget.org 中的公共包,例如 System.MVC.Web?因为如果这是在一台新机器上,使用私有 nuget 服务器,你需要 在工具 > 选项 > Nuget 包管理器 > 中配置该源 包源。 (详情请见https://docs.microsoft.com/en-us/nuget/tools/package-manager-ui) 检查您是否已将文件夹添加到您的 git 存储库,但同时 time 为其内容设置排除项。当你做一个检查时 清理结帐查看文件夹是否存在但为空。如果那是 如果只是删除文件夹, git ignore 应该从 现在开始,每个新克隆都会做正确的检查。 如果以上两个最有可能是原因 不行。尝试从包管理器中恢复包 控制台并使用详细信息更新您的帖子。

您可以打开包管理器控制台并输入:

Update-Package -reinstall

Update-Package -reinstall -Project YourProjectName

仅供参考,Microsoft 提供了全面的文档 - https://docs.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 文件。这部分似乎工作正常。 @SOROMEED 我认为这可能是问题所在。如果您在解决方案中启用了包还原,则不需要该 repositories.config。在理想情况下,您的包文件不应包含任何内容,恢复将抓取所有项目并恢复它需要的包。因此,只需尝试删除该文件夹。仅供参考***.com/questions/11207635/… 有趣,我不太明白为什么这种方法行不通,但我会尝试你的方法,即使我无法忍受 nuget restore【参考方案3】:

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

检查您的 packages.config 文件以查看您的 packages 标签是否如下所示:

<packages xmlns="urn:packages">

如果是这样,请删除 xmlns 属性,这样就可以了:

<packages>

这为我解决了问题!

【讨论】:

【参考方案4】:

我已经解决了这个问题。请按照以下步骤操作

    在 Visual Studio 中,单击工具 > 扩展和更新。 导航到 Online,搜索“NuGet Package Manager for Visual Studio”,然后点击更新。 (如果没有按钮更新,导航到更新 > Visual Studio Gallery,找到“NuGet Package Manager for Visual Studio”,然后点击更新。) 然后重新启动 Visual Studio。

【讨论】:

我已经这样做了,但它没有解决它。如您所见,我的 nuget 版本已经更新到今天可用的最新版本。 “如您所见,我的 nuget 版本已经更新到今天可用的最新版本” - 并非如此;你已经展示了 2.8.*;那真的很老了。你运行的是什么版本的 Visual Studio? 啊,VS 2012,我现在看到了标签。您是否能够更新到 Visual Studio 的更新版本?某些工具等可能依赖于更新版本的 NuGet,而这又可能意味着更新版本的 VS。 不,我无法升级我的 Visual Studio 版本【参考方案5】:

尝试从下面的 nuget 缓存文件夹中删除您的包,以便强制从源下载 NUGET

C:\Users\>\.nuget\packages

【讨论】:

以上是关于nuget 无法识别已安装的软件包的主要内容,如果未能解决你的问题,请参考以下文章

Nuget PM 中无法识别 Entity Framework Core 命令

Ionic 和 Cordova 已安装,但命令无法识别

PyCharm 无法识别已安装的模块

布朗尼已安装但无法识别

模块已安装但 PyCharm 无法识别

Fluent 断言命名空间无法识别