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


263

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

在您的答案中,请指定解决方案适用于哪个版本的VS。


4
通常想知道,删除这些DLL是否会导致构建时间或其他方面的明显改善?(当然,除了消除冗余的依赖关系以外)
monish001 2014年

3
VS2015是否有任何类似的免费扩展程序?
George Birbilis

1
VB.Net项目自VS 2005起就拥有它,但从未在C#项目中实现。msdn.microsoft.com/zh
SLAI

4
您可以投票决定将此功能作为VS的一部分包含在内(应该如此)。
Mike Lowery

2
@ monish001-每个程序集和资产都增加了部署足迹,是管理/维护或成为错误潜在来源的另一件事。
StingyJack

Answers:


55

如果已安装Resharper(插件),则可以访问一项功能,该功能可让您通过“ 解决方案资源管理器”>(右键单击)“引用”>“优化引用”来分析使用过的引用

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

此功能无法正确处理:

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

在此处输入图片说明


1
您的最后一条语句“但是,它并不完美,依赖于当前项目中引用的程序集的任何程序集仍被标记为未使用。” 其实不是问题。该版本知道要复制您的引用的引用。看到这个答案:stackoverflow.com/a/2290139/26262
Ed Greaves

尽管这是一种可行的方法,但对我来说“在各种Visual Studio版本中”对我而言意味着的不是其他,而是已经在“内部”
Mark Schultheiss

28

ReSharper的扩展会为你做到这一点。

此扩展支持Visual Studio 2005到2017。

尽管编译器不会包括未使用的程序集,但多余的using语句和引用会减慢Visual Studio和Intellisense的速度,因为该工具还需要考虑更多代码。


12
那个人在项目中发现了很多未使用的引用-但是其中有很多确实在使用中...所以我不相信Resharper带有引用
Offler 2014年

5
当有很多引用最终导致VS崩溃时,Resharper会消耗大量项目中的大量内存
Cemre

2
@eraj VS Express版本不支持扩展,而是获得免费的社区版本,该社区版本支持诸如ReSharper之类的扩展。
codemonkeh 2015年

4
皮特(Pete),任何自动化工具都有可能超出范围。尤其是在DI和PCL依赖的时代,可能似乎不需要这些依赖,但这并不是该工具的错。您不应使用屏幕截图,而应使用版本控制软件。像Git或Hg这样的现代系统将使您可以经常在本地办理登机手续,因此您永远不会丢失工作。
Mathieson

2
据我所知,Resharper显示了未使用的名称空间,而不是程序集引用,这就是我认为“项目中未使用的引用”的意思。我也想找到后者
Sonic Soul

28

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


3
无法使用MVC项目。它将必需的DLL删除为.Helpers和.WebPage
User.Anonymous 2014年

3
@Amit扩展程序现在具有适用于VS2012
Philipp M

这作品,如果你遵循一个简单的一招:devio.wordpress.com/2014/12/03/...
拉维punjwani

5
和VS2019?
DARKGuy

21

在Visual Basic项目中,支持删除“未使用的引用”(项目->参考->未使用的引用)。在C#中没有这样的功能。

在C#项目中(没有其他工具)执行此操作的唯一方法是删除可能未使用的程序集,编译该项目并验证在编译过程中是否发生任何错误。如果未发生任何错误,则说明您已卸下未使用的部件。(请参阅我的帖子

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


2
在VS 2008/2010中,有一个右键单击菜单选项以删除或删除使用和排序使用。
JohnB

11
@JohnB:您当然是对的,但是他的问题是关于(对程序集的)引用而不是对(名称空间的)引用。
Jehof

VS2012:菜单:项目->属性->参考->未使用的参考。
LosManos 2015年

21

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

  • 参考已在项目中删除
  • 用msbuild编译项目
  • 检查构建错误
  • 如果存在构建错误,请还原删除的参考。

刚刚为VS 2017 Community Edt安装了它。-到目前为止效果很好。
托马斯

它说有构建错误,但是在我构建时没有构建错误,因此无法正常运行vs2015竞赛
Raghavendra

您可以在github的页面上创建一个问题:github.com/subatta/ResolveUR/issues
Claudiu Constantin,

5
Visual Studio Marketplace上5条评论中的2.5颗星(满分52条)使我有点失望
ECH

在MVC项目上进行了尝试,它建议删除一些重要的依赖项,例如System.Web.Helpers,因此我不愿意让它自行运行。
Jahaziel

18

您所需要的只是石头和裸露的指关节,然后您就可以像穴居人一样来做。

  1. 删除未使用的名称空间(针对每个类)
  2. 运行调试版本
  3. 将可执行文件和其余名称空间引用复制到新位置
  4. 运行可执行文件
  5. 缺少参考DLL错误将发生
  6. 从Debug文件夹复制所需的DLL
  7. 重复4-6
  8. 姑姑嘎嘎?
  9. 扔石头

您还可以依靠构建工具来告知仍需要哪个参考。这是VS 2017的时代,穴居人仍然幸存。


哈哈,嗯,这里有点幽默没什么错。斯通曼的方法确实如此,看起来如果没有大量的企业版,它就是我们现在所拥有的。
尼古拉斯·彼得森

16

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

下载并安装Visual Studio 11的参考助手

稍后您可以执行以下操作:

在此处输入图片说明


1
Visual Studio 11的参考助手似乎不准确,它向我显示了我知道实际使用过的大量未使用参考(通过Nuget安装)。
Bill Yang

1
无法使用MVC项目。它将必需的DLL删除为.Helpers和.WebPage
User.Anonymous 2014年

是的,这又回到了使用WPF C#程序的困境。
查尔斯·克莱顿

在VS2017中无法选择
内森

1
VS2019中也不存在
Vin Shahrdar

15

使用Visual Studio 2017和2015版本时,可以使用代码映射功能执行此操作,但是此功能仅在企业版中可用,而在社区专业中不可用。

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

在此处输入图片说明


1
如果您具有企业版,但在上下文菜单中未看到此选项,则需要从VS安装程序的“单个组件”面板下安装“代码映射”功能。
StingyJack

这是一个好人,谢谢@Glenn。我只想说我已经使用了Micosoft.Office.Interop.Excel,但没有在其他参考文献中列出它,因此仍然必须谨慎一些。
埃米尔·菲利普 Emil Filip)

14

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


15
@abarisone您的通用“不要使用链接作为答案”响应实际上仅应在您已真正找到答案之后使用。链接是唯一与此答案相关的内容。它是VS插件的链接,因此没有其他相关内容。
查尔斯·博ung

我同意查尔斯。这似乎是@abarisone的适度滥用。这个答案确实帮助我节省了一些时间,如果有任何mod滥用其删除权限,我会讨厌它。
Zun

@Zun首先,我从来没有担任过主持人,或者自称是主持人。我的目的是询问有关扩展的更多信息。在我看来,这可能只是肤浅的,但我当然不是故意要虐待。
abarisone

12

有人建议使用很棒的工具-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)将新的扩展名更改zipvsix

7)安装并享受:)

我已经与VS2013,谢谢测试了它的源本教程

编辑 添加以支持VS 2015 Community Edition

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

括号的含义

[ – minimum version inclusive.

] – maximum version inclusive. 

( – minimum version exclusive. 

) – maximum version exclusive.

1
这样很好!似乎是一个简单的错字,作者本可以在几年前修复-但他似乎已经消失了,至少该网站有...
wexman

这不是错字,而是受支持的最高VS版本:)。开发人员应该在每个新的VS版本中测试其附加组件并增加数量,但是由于某些原因,他们没有这样做。
VladL

请记住停止“复制和粘贴”内容。:)
Rikki 2015年

@RikkiRockett你在跟我说话吗?我已经在答案中链接了源。或您到底是什么意思?
VladL

2
没错 我在开玩笑。只是对那个花花公子的家伙说,他们把“)”而不是“]”让我们所有人都按照您的指示进行。:)虽然做得很好,但您刚才说的话没事,一切都很好!您刚刚为我节省了很多时间。(y)
Rikki 2015年

7

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

用于Visual Studio 2010。


2
您需要谨慎处理Web项目。它报告用作“未使用”的DLL。
Miro J.

我同意米罗。我尝试将其用于Web项目,并选择了运行我的Web应用程序所需的两个参考(System.Web。*,Ninject。*,EntityFramework,仅举几例)。
Denis M. Kitchen

无法使用MVC项目。它将必需的DLL删除为.Helpers和.WebPage
User.Anonymous 2014年


-3

以下方法不依赖于任何“附加组件”,也不是很痛苦。

逐步浏览每个源文件,然后

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

扫描每个文件以查找“ 0参考”仅需一秒钟。

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


-10

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

Project>Add References

然后单击“最近使用”选项卡,您可以在其中查看最近使用的参考列表。找到您不想要的一个并删除它。然后,您无需添加任何内容即可关闭。


1
这不会检查引用是否正在使用中
Xavier Poinas

-12

在Visual C#中删除引用在解决方案资源管理器中,打开项目节点下的“引用”节点。右键单击引用,然后单击“删除”。


3
这似乎并不仅限于未使用或自动运行。
内森·塔吉

这不是自动操作。
阿米尔2015年

很好的尝试,但是答案很差,不是像以前所说的那样自动
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.