Visual Studio:检测不需要的程序集
在大型和/或者长期运行的项目中,我倾向于引用许多程序集和名称空间,并且通常我最终会在以后删除某些功能或者将其移至另一个项目中。
我只是想知道,是否有一种方法可以检查整个Visual Studio解决方案中的每个项目(heck,每个.cs文件),并获取所有未被实际使用并且可以安全删除的所有引用程序集和命名空间的列表?我知道ReSharper可以针对单个代码文件执行此操作,但是我没有看到检查所有文件或者检查不需要的程序集的选项。
如果重要,请使用Visual Studio 2005和2008 Professional。
编辑:到目前为止,谢谢。 ReSharper或者"如果构建中断会删除并读取"的问题是,每个文件和程序集都非常繁琐(我的项目在7个程序集中有120个.cs文件,在解决方案之外总共引用了18个程序集),所以理想情况下,我正在寻找"一键式"的东西。 Big Bonus点表示可以在构建脚本中使用以生成报告的一些自动方式:)
解决方案
是的,我不认为有一个。我只是删除一些我认为不需要的内容,然后构建:/
顺便提一句。这将继续使用错误。我们可以使用Visual Studio Power命令删除使用方法并对其进行排序,因此请先执行此操作,然后删除随机程序集:D
Resharper会为我们完成此操作,我们可以在"清理代码"选项中进行设置,以便在整个解决方案中运行; o)
任何体面的代码探查器都会为我们完成此任务。我个人喜欢DevPartner。
如果已安装ReSharper,则可以在解决方案资源管理器中右键单击参考,然后单击"查找相关代码"。如果返回结果对话框,则说明我们正在使用该参考/部件。如果收到消息"找不到依赖于模块模块名称的代码"。然后,我们应该可以删除该引用/程序集,因为它没有被使用。
正如之前的答复所提到的,Resharper在此方面以及其他各种情况下都非常有效,例如使代码更简洁并为我们生成某些东西的方法。真正了解Resharper的所有优点的最佳方法是下载该试用版,打印出一份Keymap备忘单,然后将其粘贴在我们正在开发的位置。
长话短说,它确实解决了这个问题,但它所做的远不止于此。
它不会删除代码中对引用程序集的任何引用(我认为),但是我们可以转到每个项目的属性,转到"引用",然后单击"未使用的引用..."。然后,Visual Studio为我们提供了将其删除的选项。
但是,无法在解决方案级别上做到这一点。
如果我们拥有ReSharper,请选择解决方案,右键单击并选择清除代码。然后,ReSharper将遍历解决方案中的每个代码文件。
至于删除项目引用,如果没有代码使用该dll,则在编译器运行时不会添加引用。
(从此处交叉发布)
鉴于Visual Studio(或者它是msbuild?)检测到未使用的引用,并且不将它们包含在输出文件中,我们可以编写一个脚本,将脚本从csproj中解析出来,并将其与通过反射检测到的引用程序集进行比较项目输出。
如果你有动力...
我在Google中搜索并寻找一种从我的代码中删除未使用的"正在使用"语句的方法时发现了这个问题。
重构很棒,但是我无法使用。但是,事实证明,Visual Studio 2008会自行执行此操作。
步骤如下:
- 在Visual Studio中加载代码。
- 右键单击代码页上的任意位置。
- 从菜单中单击"组织使用"。
- 单击"删除未使用的用法"
完毕。我意识到这并不能回答最初的问题(对整个项目都做这个工作),但确实可以回答我的问题。
删除未使用的引用是Visual Studio 2008已经支持的功能。不幸的是,仅适用于VB .NET项目。
我已经在Microsoft Connect上提出了一个建议,也可以为Cprojects获得此功能:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=510326
如果我们也喜欢此功能,那么我们可以投票赞成我的建议。