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 无法识别已安装的软件包的主要内容,如果未能解决你的问题,请参考以下文章