如何查找解决方案中特定引用库的被使用类
我之前处理过好几起类似的遗留.NET库迁移瘦身的需求,给你分享几个比移除引用看错误要高效得多的办法:
Visual Studio批量查找引用筛选
右键点击迁移项目里的LegacyLibA引用,选择「查找所有引用」。在弹出的「查找结果」窗口中,用顶部的筛选器只保留当前迁移应用的项目(把其他依赖LegacyLibA的项目排除掉)。这样就能直接看到应用里所有用到的LegacyLibA的类、方法,还能一键跳转到具体代码位置。如果库特别庞大,还可以把查找结果导出到Excel里,方便后续分类梳理。Roslyn脚本自动化分析
如果你懂点C#,可以用Roslyn API写个几十行的小工具,自动遍历迁移应用的所有代码文件,识别出所有引用LegacyLibA命名空间下的类型。核心思路是先编译迁移项目,然后遍历语法树,定位所有引用外部类型的节点,判断其所属程序集是否为LegacyLibA,最后收集这些类型。这种方法适合需要反复分析、或者应用代码量极大的场景,完全自动化,不用手动操作。运行时依赖分析(dotnet dump工具)
这个方法能帮你区分「编译时引用」和「实际运行时用到的类型」。步骤很简单:- 启动迁移应用;
- 用命令
dotnet dump collect -p <应用进程ID>生成内存转储文件; - 用
dotnet dump analyze <转储文件路径>加载转储,执行dumpheap -type LegacyLibA命令,就能看到应用运行时真正加载和使用的LegacyLibA类型。
这个方法特别适合那些编译时引用了但实际运行中从未调用的冗余类型排查。
JetBrains工具的依赖可视化
如果你用Rider或者Resharper,右键点击LegacyLibA的引用,选择「Show Dependencies」,就能生成清晰的依赖关系图。你可以在图里过滤掉无关项目,只保留当前应用到LegacyLibA的依赖路径,一眼就能看到哪些类被直接或间接引用。另外,Resharper的「Code Analysis」功能还能自动找出项目中未被使用的引用,反过来就是你需要的已使用类型列表。
最后补个小技巧:在Visual Studio的解决方案资源管理器里,开启「显示引用计数」(在选项里勾选),然后查看LegacyLibA项目中各个类的引用计数,筛选出计数来自你的迁移应用的类,这个适合快速做个粗略排查。
内容的提问来源于stack exchange,提问作者newprint

