删除未使用的引用(!="使用")

时间:2020-03-05 18:58:27  来源:igfitidea点击:

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

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

解决方案

回答

Resharper将为我们做到这一点(还有更多!)

回答

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

如果你有动力...

回答

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

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

原始帖子实际上是在问一个问题:"如何识别和删除一个Visual Studio项目对未使用的其他项目/程序集的引用?"发布者希望装配件不再出现在构建输出中。

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

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

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

我们将获得:

  • 在浏览器窗口中对该引用的依赖项列表,或者
  • 一个对话框,告诉我们"找不到依赖于模块XXXXXXX的代码。"。

如果获得第二个结果,则可以右键单击"引用",选择"删除",然后将其从项目中删除。

虽然我们必须"手动"执行此操作,即一次仅引用一次,但它可以完成工作。如果有人以某种方式使它自动化,我很想听听它是如何完成的。

我们几乎可以忽略.Net Framework中的内容,因为它们通常不会复制到生成输出中(通常,尽管对于Silverlight应用程序不一定是正确的)。

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

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

  • 在进行动态错误检测期间为我们标识未使用的using子句。它们显示为"代码检查警告"-代码将在文件中显示为灰色(默认),ReSharper将提供删除它的提示:http://www.jetbrains.com/resharper/features/code_analysis.html#On- the-fly_Error_Detection
  • 允许我们在代码清除过程中自动删除它们:http://www.jetbrains.com/resharper/features/code_formatting.html#Optimizing_Namespace_Import_Directives

最后,意识到ReSharper对解决方案进行静态代码分析。因此,如果我们有对程序集的动态引用,例如通过反射或者在运行时动态加载并通过接口访问的程序集,则它将不会选择它。在我们处理项目时,无可替代地理解代码库和项目依赖性。我确实发现ReSharper功能非常有用。

回答

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

我已经在Microsoft Connect上提出了一个建议,也可以为Cprojects获得此功能:

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

如果我们也喜欢此功能,那么我们可以投票赞成我的建议。