从 Visual Studio 项目中的项目中删除所有未使用的引用

Posted

技术标签:

【中文标题】从 Visual Studio 项目中的项目中删除所有未使用的引用【英文标题】:Removing all unused references from a project in Visual Studio projects 【发布时间】:2011-03-10 13:57:24 【问题描述】:

我只是想知道是否可以在各种 Visual Studio 版本中自动从项目中删除从未使用过的所有引用?

在您的回答中,请说明该解决方案适用于哪个版本的 VS。

【问题讨论】:

通常想知道,删除这些 DLL 是否会显着缩短构建时间或其他什么? (当然,除了去除多余的依赖) VS2015有没有类似的免费扩展? VB.Net 项目自 VS 2005 以来就有它,但它从未在 C# 项目中实现msdn.microsoft.com/en-us/library/7sfxafba 您可以 vote 将此功能作为 VS 的一部分包含在内(应该如此)。 @monish001 - 每个程序集和资产都会增加部署足迹,是另一件需要管理/维护的事情,或者是潜在的错误来源。 【参考方案1】:

VS2022(撰写本文时的预览版)中,SDK Style Projects(阅读:.NET Core 和更新版本)开箱即用。

如果可用,您可以在项目上下文菜单中找到它:

您可以选择如何处理每个发现。

阅读更多相关信息here。

Pro-tip: 应用此功能后检查您的项目是否可以正确编译和运行。例如,根据我的经验,它检查是否在运行时使用了依赖项。

【讨论】:

这个工具也会删除使用过的引用,尤其是与EF相关的引用【参考方案2】:

[更新]此功能仅适用于 .Net 核心项目。

此功能即将在 Visual Studio 2019 中推出,并且已通过 Visual Studio 2019 v16.10 Preview 1 提供。

此选项默认关闭,但您可以在菜单工具>选项>文本编辑器>C#>高级下启用它。在解决方案资源管理器(实验)中选择Remove Unused References 命令。启用该选项后,Remove Unused References 命令将出现在项目名称或依赖项节点的右键菜单中。

【讨论】:

这仅适用于 .NET Core 项目吗? 它应该可用于 .net 和 .net 核心项目。 我启用了设置,但仍然看不到 .NET 框架项目的按钮。 你说得对,看来这个功能只适用于.Net核心项目。太可惜了!留下评论以免将来误导大家。【参考方案3】:

对于 Visual Studio 2013/2015/2017,有一个扩展可以完全满足您的需求:ResolveUR。这基本上是:

项目中的引用被移除 项目是用 msbuild 编译的 检查构建错误 如果存在构建错误,请恢复已删除的引用。

【讨论】:

刚刚为 VS 2017 Community Edt 安装了它。 - 到目前为止工作正常。 它说有构建错误,但我构建时没有构建错误,所以它无法正常工作 vs2015 comm edtion 你可以在github的页面上创建一个issue:github.com/subatta/ResolveUR/issues 来自 52 条评论的 Visual Studio Marketplace 中 2.5 颗星,最多 5 颗星让我有点反感 在一个 MVC 项目上尝试过,它建议删除几个重要的依赖项,例如 System.Web.Helpers,所以我不愿意让它自己去。【参考方案4】:

您可以尝试免费的 VS2010 扩展:Reference Assistant 由 Lardite 组提供。它非常适合我。此工具有助于查找未使用的引用,并允许您选择应删除哪些引用。

【讨论】:

不适用于 MVC 项目。它删除了必要的 DLL 作为 .Helpers 和 .WebPage @Amit 扩展有一个working version for VS2012 now 如果你遵循一个简单的技巧就可以了:devio.wordpress.com/2014/12/03/… 对于 VS2019?【参考方案5】:

下面的方法不依赖任何'add-on',也不是很痛苦。

逐步浏览您的每个源文件并

    全选 (Ctrl-A) 切换轮廓扩展(Ctrl-M、M)。这会将文件减少到两行。 单击命名空间的“+”。这会将文件的每个类显示为一行。扫描每个类的引用计数,寻找未引用的类。 单击每个类的“+”。这会将每个类函数显示为一行。扫描每个函数的引用计数,寻找未引用的函数。

扫描每个文件以查找“0 引用”只需一秒钟。

扫描整个项目只需几分钟。

【讨论】:

此回复中的问题部分是“逐步检查您的每个源文件”,这是不适用的,在我的项目中,我有 900 多个 .VB 文件。编辑:我大声阅读了回复的作者姓名,因为该项目被称为 BRASS。【参考方案6】:

在 Visual Studio 2017 和 2015 版本中,您可以使用 代码映射 功能来完成此操作,但此功能仅在 企业版 中可用,而在 社区专业版本。

右键单击解决方案资源管理器中的项目节点,然后选择“在代码图上显示”。这会将您的 .dll 显示为空白图表中的单个节点。右键单击代码映射中的那个节点并选择“Show Assemblies This References”。这将添加一个名为“Externals”的附加节点,该节点可以展开以仅显示实际引用的程序集。

【讨论】:

如果您有企业版并且在上下文菜单中没有看到此选项,那么您需要从 VS 安装程序的“个人组件”面板下安装“代码映射”功能。 这很好,谢谢@Glenn。我只想说我已经使用了 Micosoft.Office.Interop.Excel,它没有在其他参考文献中列出,所以还是要小心一点。【参考方案7】:

你需要的只是石头和光秃秃的指关节,然后你就可以像穴居人一样做到这一点。

    删除未使用的命名空间(针对每个类) 运行调试构建 将您的可执行文件和剩余的命名空间引用复制到新位置 运行可执行文件 会出现缺少引用 DLL 错误 从 Debug 文件夹复制所需的 DLL 重复 4-6 咕咕嘎嘎? 扔石头

您还可以依靠您的构建工具来让您知道仍然需要哪个参考。 VS 2017的时代,穴居人还活着。

【讨论】:

哈哈,好吧,这里有点幽默没有错。 Stoneman 方法确实如此,看起来没有昂贵的企业版,它就是我们现在所拥有的。【参考方案8】:

Resharper extension 将为您执行此操作。

此扩展支持 Visual Studio 2005 到 2017。

虽然编译器不会包含未使用的程序集,但多余的 using 语句和引用会降低 Visual Studio 和 Intellisense 的速度,因为这些工具需要考虑更多代码。

【讨论】:

在项目中发现了很多未使用的引用 - 但其中有一堆真正在使用......所以我不相信 Resharper 的引用 Resharper 在大型项目中消耗大量内存,因为有很多引用最终导致 VS 崩溃 @eraj VS Express 版本不支持扩展,获取免费的社区版,支持 ReSharper 等扩展。 Pete,任何自动化工具都有可能超出范围。特别是在 DI 和 PCL 依赖的时代,可能需要似乎未使用的依赖项,但这几乎不是工具的错。您应该使用版本控制软件,而不是截图。像 Git 或 Hg 这样的现代系统可以让您在本地频繁签到,因此您永远不会失去工作。 据我所知,告诉 Resharper 显示未使用的命名空间,而不是程序集引用,这就是我认为“项目中未使用的引用”这个问题的意思。我也想找到后者【参考方案9】:

有些人建议使用一个很棒的工具 - Reference Assistant for Visual Studio。问题是 VS2012 是最新支持的 Visual Studio。但是也有办法让它在 VS2013 中工作;)

方法如下:

1) 下载Lardite.RefAssistant.11.0.vsix

2) 将扩展名更改为 zip:Lardite.RefAssistant.11.0.vsix -> Lardite.RefAssistant.11.0.zip

3) 解压并在文本编辑器中打开extension.vsixmanifest文件

4) 找出所有出现的InstallationTarget Version="[11.0,12.0)" 并将它们替换为InstallationTarget Version="[11.0,12.0]"(注意右括号)

5) 保存文件并压缩所有文件,使其位于根 zip 级别

6) 将新zip的扩展名改为vsix

7) 安装并享受 :)

我已经用VS2013测试过了,感谢source的教程

编辑 添加支持 VS 2015 社区版

<InstallationTarget Version="[14.0,15.0]" Id="Microsoft.VisualStudio.Community" />

括号的含义

[ – minimum version inclusive.

] – maximum version inclusive. 

( – minimum version exclusive. 

) – maximum version exclusive.

【讨论】:

这很好用!似乎是一个简单的错字,作者本可以在几年前修复 - 但他似乎已经消失了,至少网站已经...... 这不是错字,而是支持的最高VS版本:)。开发人员应该在每个新的 VS 版本上测试他的插件并增加数量,但出于某种原因他们没有这样做。 记得停止“复制和粘贴”的东西。 :) @RikkiRockett 你在跟我说话吗?我已经在我的答案中链接了来源。或者你到底是什么意思? 不,伙计。我在开玩笑。只是对使用“)”而不是“]”的家伙说,他让我们都按照您的指示进行操作。 :) 干得好,只是按照你说的做了,一切都很好!你刚刚为我节省了一天的时间。 (y)【参考方案10】:

如果您安装了 Resharper(插件),您可以通过解决方案资源管理器 >(右键单击)参考 > 优化参考...

访问一项允许您分析已用参考的功能

http://www.jetbrains.com/resharper/webhelp/Refactorings__Remove_Unused_References.html

此功能无法正确处理:

依赖注入程序集 动态加载程序集 (Assembly.LoadFile) 通过互操作加载的本机代码程序集 ActiveX 控件(COM 互操作) 加载程序集的其他创造性方法

【讨论】:

您最后的声明“但是它并不完美,任何依赖于当前项目中引用的程序集的程序集仍被标记为未使用。”其实不是问题。该构建知道复制您的引用的引用。看到这个答案:***.com/a/2290139/26262 虽然这是一种可行的方式来做到这一点,但“在各种 Visual Studio 版本中”对我来说并不是别的意思,而是已经在“内部”【参考方案11】:

在 VB2008 中,它是这样工作的:

Project>Add References

然后单击“最近”选项卡,您可以在其中查看最近使用的参考列表。找到你不想要的并删除它。然后你关闭而不添加任何东西。

【讨论】:

这不会检查引用是否在使用中【参考方案12】:

在 Visual Studio 2013 中,此扩展有效: ResolveUR

【讨论】:

@abarisone 您的通用“不要使用链接作为答案”响应真的应该只在您实际查看答案之后使用。该链接是唯一与此答案相关的内容。它是一个 VS 插件的链接,因此没有其他相关内容需要包含。 我同意查尔斯的观点。这似乎是来自@abarisone 的适度滥用。这个答案确实帮助我节省了一些时间,如果有任何模组滥用他们的权力来删除它,我会讨厌它。 @Zun 首先,我从来没有当过版主,也没有自称是版主。我的意图是询问有关扩展的更多信息。在我身边这可能是肤浅的,但我肯定不是故意虐待的。【参考方案13】:

使用 DevExpress,我遵循以下说明:

    在 VS 中,转到 DevExpress - 编辑器 - 代码清理。在规则下,选中“删除未使用的命名空间引用”。点击确定。 右键单击解决方案,然后选择“代码清理”。清理会运行几分钟,然后结束。 构建您的应用程序

【讨论】:

更新:devexpress.com/Support/Center/Question/Details/T531578/… 那么它删除了哪个:命名空间还是引用?【参考方案14】:

对于任何来这里寻找Visual Studio 2012的人:

下载安装Reference Assistant for Visual Studio 11

稍后你可以这样做:

【讨论】:

Visual Studio 11 的参考助手似乎不准确,它向我展示了一堆我知道实际使用的未使用参考(通过 Nuget 安装)。 不适用于 MVC 项目。它删除了必要的 DLL 作为 .Helpers 和 .WebPage 是的,这又用 WPF C# 程序咬了我一口。 在 VS2017 中不是一个选项 VS2019中也不存在【参考方案15】:

您可以使用 Visual Studio 扩展库中的Reference Assistant extension。

使用并适用于 Visual Studio 2010。

【讨论】:

你需要小心网络项目。它报告用作“未使用”的 DLL。 我同意米罗的观点。我尝试在我的 Web 项目中使用它,它选择了运行我的 Web 应用程序所需的两打引用(System.Web.*、Ninject.*、EntityFramework,仅举几例)。 不适用于 MVC 项目。它删除了必要的 DLL 作为 .Helpers 和 .WebPage【参考方案16】:

在 Visual Basic 项目中,支持删除“未使用的引用”(Project-->References-->Unused References)。在 C# 中没有这样的函数。

在 C# 项目中执行此操作(无需其他工具)的唯一方法是删除可能未使用的程序集,编译项目并验证编译期间是否出现任何错误。如果没有发生错误,则您已删除未使用的程序集。 (See my post)

如果您想知道哪个项目(程序集)依赖于其他程序集,您可以使用NDepend。

【讨论】:

在 VS 2008/2010 中有一个右键菜单选项可以删除或删除和排序使用。 @JohnB :你当然是对的,但他的问题是关于引用(对程序集)而不是使用(对命名空间)。 VS2012: menu:Project->properties->References->Unused references。

以上是关于从 Visual Studio 项目中的项目中删除所有未使用的引用的主要内容,如果未能解决你的问题,请参考以下文章

为啥从 Visual Studio 2008 中删除了在新 ATL 项目中使用属性的选项?

Visual Studio 2010 中 SQLCLR 项目中的计算列

默认情况下,Visual Studio 2015 数据库项目是不是会删除不在项目中的存储过程?

在Visual Studio中恢复已删除的项目

Visual Studio 2013 数据库项目 - DROP 目标中的对象但不在项目中

如何在 Visual Studio 2010 中删除/卸载项目模板