Visual Studio References 显示未引用的 NuGet 包

Posted

技术标签:

【中文标题】Visual Studio References 显示未引用的 NuGet 包【英文标题】:Visual Studio References shows NuGet package that is not referenced 【发布时间】:2020-11-04 10:00:25 【问题描述】:

我通过右键单击 VS 2019 中的 packages.config 文件将 .NET Framework 4.7.2 项目从 packages.config 转换为 PackageReferences 格式。

从那时起,Visual Studio 会显示我从“引用”节点中的项目中卸载的 NuGet 包的蓝色图标。真正奇怪的是,如果没有这个包,构建应该会失败,因为它在代码中使用,但构建成功!

    .csproj 中没有此 NuGet 包的包引用 文件。 项目目录下没有packages.config文件 我删除了 .vs 文件夹和旧包文件夹 重新启动 Visual Studio 问题仍然存在 在 Visual Studio 中触发的 uninstall-package 命令表示 软件包未安装。 但显示参考(蓝色图标)并且项目已构建!

问题

    如何从项目中完全删除这个包? 我现在如何阻止 Visual Studio 引用此包?

【问题讨论】:

如果您可以提供一些额外上下文的屏幕截图会有所帮助。您可能还想尝试从 %userprofile%\.nuget\packages\ 删除包目录,然后重新启动 VS。 只需删除解决方案资源管理器中的引用即可。引用仍在 csproj 文件中,但不再是用户,并且是蓝色的,因为找不到 dll。 嗨,Ian,nuget 包也在另一个项目中被引用,该项目作为项目参考添加到原始项目中。一旦我删除了该项目引用,nuget 包也消失了! @jdweng - 您无法在解决方案资源管理器中删除新世界中 Nuget 包的引用。此外,该软件包未在 csproj 文件中列出,这是主要混乱的根源。 【参考方案1】:

=================================

如果你的项目没有引用任何其他项目,或者只是引用了一个没有安装相同 nuget 包的项目,我认为问题与你的项目本身或 VS 环境有关。

在这种情况下,当你已经卸载了 nuget 包时,nuget 包的蓝色图标仍然停留在解决方案资源管理器中,这很奇怪。

请尝试以下建议:

1)Extensions-->Manage Extensions-->Installed下禁用任何第三方扩展程序/p>

2) clean nuget caches 并在工具下重置 vs 设置-->导入和导出设置-->全部重置设置

3)然后关闭VS,删除

下的缓存文件
C:\Users\xxx(current user)\AppData\Local\Microsoft\VisualStudio\16.0_xxx\ComponentModelCache

同时删除.vs隐藏文件夹、binobj文件夹。

4)然后重启VS测试问题是否依然存在。

此外,您可以使用devenv /safemode 启动一个干净的初始VS,然后测试您的项目。

==================================

如果您的情况是这样的:

您的项目 B 引用了一个名为 Project A 的项目,而 A 也安装了相同的 nuget 包。而项目A使用PackageReference nuget management format。

虽然您已经卸载了项目 B 上的 nuget 包,但您的 obj 文件夹仍然包含 project.assert.json,xxx.nuget.g.props 之类的文件,这是 PackageReference 的一个功能.正因为如此,Project B的nuget包管理格式与Project A相同,会将Project A的dll传输到Project B 以便您可以使用 项目 B 中的 dll。

And 删除 .vs 隐藏文件夹将删除 Project B 的 nuget 包格式 PackageReference,因为您已经卸载了 Project B 但obj 文件夹的PackageReference 内容仍然存在。

所以你应该关闭VS,同时删除Project B的.vs隐藏文件夹、bin和obj文件夹。

注意重建和清理不会删除之前的恢复文件。

如果这样不行,我想你在B.csproj文件下写了这个xml节点:

<PropertyGroup>
    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>  

所以你应该仔细检查你的项目 B,它仍然会将文件 project.assert.json,xxx.nuget.g.props,.... 恢复为 PackageReference。 p>

因此,如果有,请删除此节点,同时删除.vs隐藏文件夹、binobj文件夹。

【讨论】:

以上是关于Visual Studio References 显示未引用的 NuGet 包的主要内容,如果未能解决你的问题,请参考以下文章

由Find All References引发的思考。,

Visual Studio 路径宏

Visual Studio 2015 添加服务参考

Visual Studio 中的 Jquery 没有智能感知

如何在 Visual Studio 中重命名方法并保留历史记录?

Visual Studio 2012 JavaScript Intellisense 参考组恢复为隐式 (Windows)