100

如何在我的项目中查找和删除未使用的引用?

我知道您可以轻松删除 vs 2008 中的 using 语句,但这不会删除您项目中的实际引用。引用的 dll 仍将复制到您的 bin/setup 包中。

4

11 回答 11

55

*注意:有关此答案的另一个版本,请参阅http://www.jetbrains.net/devnet/message/5244658

通读帖子,似乎对原始问题有些困惑。让我试一试。

原始帖子实际上是在问一个问题:“我如何识别和删除一个 Visual Studio 项目对其他未使用的项目/程序集的引用?” 发帖人希望程序集不再作为构建输出的一部分出现。

在这种情况下,ReSharper 可以帮助您识别它们,但您必须自己删除它们。

为此,打开解决方案浏览器中的引用,右键单击每个引用的程序集,然后选择“查找相关代码”。看:

http://www.jetbrains.com/resharper/features/navigation_search.html#Find_ReferencedDependent_Code

您将获得:

  1. 浏览器窗口中该引用的依赖项列表,或

  2. 一个对话框告诉您“未找到依赖于模块 XXXXXXX 的代码。”。

如果你得到第二个结果,你可以右击引用,选择移除,然后从你的项目中移除它。

虽然您必须“手动”执行此操作,即一次引用一个,但它会完成工作。如果有人以某种方式将其自动化,我有兴趣了解它是如何完成的。

您几乎可以忽略 .Net 框架中的那些,因为它们通常不会被复制到您的构建输出中(通常 - 尽管对于 Silverlight 应用程序不一定如此)。

有些帖子似乎在回答这个问题:“如何从源代码文件中删除不需要解析该文件中的任何引用的 using 子句 (C#)”。

在这种情况下,ReSharper 确实可以通过以下几种方式提供帮助:

  1. 在动态错误检测期间为您识别未使用的 using 子句。它们显示为代码检查警告 - 代码将在文件中显示为灰色(默认情况下),ReSharper 将提供删除它的提示:

    http://www.jetbrains.com/resharper/features/code_analysis.html#On-the-fly_Error_Detection

  2. 允许您在代码清理过程中自动删除它们:

    http://www.jetbrains.com/resharper/features/code_formatting.html#Optimizing_Namespace_Import_Directives

最后,意识到 ReSharper 会对您的解决方案进行静态代码分析。因此,如果您有对程序集的动态引用——比如通过反射或在运行时动态加载并通过接口访问的程序集——它不会拾取它。 在您处理项目时,没有什么可以替代了解您的代码库和项目依赖项。我确实发现 ReSharper 功能非常有用。

于 2009-09-05T08:19:33.100 回答
12

您可以使用我写的“删除未使用的引用”扩展名:

http://visualstudiogallery.msdn.microsoft.com/9811e528-cfa8-4fe7-9dd1-4021978b5097

于 2011-05-11T08:39:20.350 回答
7

删除未使用的引用是 Visual Studio 2008 已经支持的功能。不幸的是,仅适用于 VB .NET 项目。

我已经在 Microsoft Connect 上提出了一项建议,以便为 C# 项目获取此功能:

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=510326

如果你也喜欢这个功能,那么你可以投票给我的建议。

于 2009-11-13T13:58:20.313 回答
5

试试这个:参考助手

概括

Reference Assistant 有助于从 Visual Studio 2010 中的 C#、F#、VB.NET 或 VC++/CLI 项目中删除未使用的引用。

于 2012-02-06T01:38:20.633 回答
4

ReSharper将为您执行此操作(还有更多!)

于 2008-09-17T09:57:31.807 回答
4

ReSharper 6.1 将包括以下功能:

  • 优化引用:分析您的程序集引用及其在代码中的用法,获取冗余引用列表并将其删除。

  • 删除未使用的引用:快速重构以删除多余的程序集引用。

  • 程序集引用上的安全删除:如果所有程序集引用都是冗余的,则将删除它们,否则会显示用法并且只能删除所选列表的冗余程序集引用。

于 2011-11-15T09:17:52.143 回答
3

我在 VS 2010 Ultimate Architecture->Generate Dependency Graph->By Assembly 中没有扩展就完成了这项工作,它显示了使用的程序集,并手动删除了未使用的引用。

于 2012-10-28T10:29:17.323 回答
3

我有一个适用于任何版本的 Visual Studio 和任何框架版本的免费答案。它不会删除未使用的引用,但会识别它们。

您可以在项目 dll 上使用Telerik JustDecompile 。只需在 JustDecompile 中打开 dll 并进入下References查看编译后的 dll 中实际使用了什么。

在此处输入图像描述

于 2015-08-26T17:06:05.687 回答
0

鉴于 VisualStudio(或者它是 msbuild?)检测到未使用的引用并且不将它们包含在输出文件中,您可以编写一个脚本来解析 csproj 中的引用,并将其与通过反射检测到的引用程序集进行比较项目输出。

如果你有动力...

于 2008-10-23T07:21:07.197 回答
0

我认为这是在 bin\ 中复制的,因为在删除引用的项目中,引用了具有相同引用的其他项目...

于 2014-12-08T18:44:11.400 回答
0

如果您知道哪些参考未被使用,您可以手动删除它们。
在解决方案资源管理器中,右键单击“引用”节点中的引用,然后单击“删除”。

于 2015-12-18T12:22:24.923 回答