0

我们小组有一个“工具库”DLL,我们的几个内部项目(都是 C#)都在使用它。我产生了一种直觉,即大部分工具库仅由其中一个项目使用——让我们称该项目为“项目 A”。是否有任何 .NET 工具可以检查工具 DLL 和所有项目(可能是项目 EXE),并枚举工具库中确实仅由项目 A 使用的所有方法和类?我认为一些重构是有序的(将工具库的一部分移回项目 A 自己的代码库),这样的列表听起来会很有帮助。

由于反思,我不认为一个工具可以 100% 正确地完成这项工作。但是假设我知道我们的项目都没有使用任何巧妙的反射技术调用工具库;他们只使用应该适合静态分析的正常方法调用来调用它。

4

5 回答 5

2

听起来NDepend工具可以为您确定这一点。此外,为了快速检查您是否在 Visual Studio 中使用ReSharper,您可以右键单击项目引用中的 dll 并选择“查找相关代码”,这将列出单个项目中的用法。

于 2009-01-28T20:48:50.160 回答
1

对于从使用/使用的角度来看的详尽列表,按每个类型/命名空间(或方法,如果你真的想要)细分,NDepend可能是最好的选择。您可以获得一个免费的受限版本,它应该能够做到这一点。

查询将基于IsUsedByIsUsing

如果每个项目都有一个单独的命名空间(比如说 Foo.A 和 Foo.B)

SELECT TYPES WHERE IsUsedBy "Foo.A"

SELECT TYPES WHERE IsUsedBy "Foo.B"

你会得到一份很好的列表,列出了每个人正在使用的类型。将结果放入电子表格表中,共享/分离的内容将很好地删除

于 2009-01-28T22:19:48.200 回答
0

.NET Reflector - 从技术上讲不会给你一个列表,但如果你将所有的 DLL/Exes 加载到其中,你可以对你认为只在一个地方使用的每种类型使用“分析”功能,它会确认或显示给你其他使用该类型的地方。

于 2009-01-28T20:47:42.893 回答
0

假设项目 A 中引用了工具库 DLL,您可以使用 Resharper 中的“查找用法”功能,它会告诉您所引用的程序集(在本例中为您的工具库)正在被使用的任何地方。

于 2009-01-28T20:49:06.493 回答
0

这里只是一个建议......我相信可以写一个,但除非你有大量的 dll,否则你可能不必这样做。我会试试这个:

  • 获得“反射器”

    • 打开它 :)
    • 将所有 DLL 添加到列表中
    • 去你关心的课程/方法
    • 右键点击
    • 选择“分析”
    • 您应该在分析器中获得一个条目,显示“取决于”和“被使用”
  • 创建一个新的解决方案

    • 包括所有现有项目
    • 使用“查找所有引用”命令右键单击工具项目中的方法,查看谁在使用它们。
    • 如果只有一个,那么你知道

希望这可以帮助。

于 2009-01-28T20:49:30.440 回答