【问题标题】:Finding the dependencies of a class in c#在c#中查找类的依赖项
【发布时间】:2010-12-08 15:14:42
【问题描述】:

我们有一个 c# 应用程序,它使用了许多库(我们也编写了这些库)。该应用程序依赖于不同的库,并且一些库依赖于其他一些库。

现在在测试应用程序时,我们还需要确保所有库都正常工作。问题是该应用程序仅使用了这些库的少量功能。我可以使用 NCover 之类的工具来查找实际使用了哪些库类,但我也很想知道这些类(跨应用程序和不同的库)是如何组织的——它们的依赖结构。

所以我的问题: 我希望能够运行我的应用程序,然后获取使用的类列表,按依赖项组织(即什么调用/使用什么)。

有没有人知道任何工具(免费或非免费)可以让您做到这一点?代码全部在 VS2008 中以不同的库/应用程序组织为项目。

【问题讨论】:

    标签: c# visual-studio-2008 testing dependencies


    【解决方案1】:

    为了完成Gergely 关于 NDepend 的回答,这个工具可以帮助以 智能 的方式完成。 免责声明:我是该工具的开发人员之一

    要实现您的要求,您需要写一个Code Query over LINQ (CQLinq)。例如,我们编写了这样的查询,一方面我们有 NDepend 程序集,它们正在调用 DevExpress 程序集。下面的 CQLinq 代码查询匹配 NDepend 使用的 DevExpress 公共类型,但也迭代地匹配使用的内部 DevExpress 类型。

    let devExpressTypes = Assemblies.WithNameLike("DevExpress").ChildTypes()
    let ndependTypes = Assemblies.WithNameLike("NDepend").ChildTypes()
    let publicDevExpressTypesUsed = devExpressTypes.UsedByAny(ndependTypes)
    let devExpressTypesUsedRec = publicDevExpressTypesUsed .FillIterative(
      types=> devExpressTypes.UsedByAny(types))
    
    from t in devExpressTypesUsedRec.DefinitionDomain
    select new { t, 
       depth = devExpressTypesUsedRec[t], 
       ndependTypesUsingMe = t.TypesUsingMe.Intersect(ndependTypes) 
    }
    

    然后可以将部分结果导出到NDependdependency graph

    (请注意下方截图中 DevExpress 类型的深度。深度为零表示公共 DevExpress 类型直接被 NDepend 类型调用。对于这样的 DevExpress 类型,列出了直接使用它的 NDepend 类型.深度为1表示DevExpress类型被NDepend类型直接使用的类型使用,以此类推...)

    ...并获取您要求的类型使用图:

    【讨论】:

      【解决方案2】:

      我想你会想看看:

      Reflector

      来自 Red Gate 软件。它是免费的,并且可能是 .NET 最好和最著名的反汇编/调试工具。 它也有一个插件架构,还有一个 Codeplex 页面,.NET Reflector AddIns,其中包含许多非常有用的插件。

      对于查看依赖项,我认为Graph 插件应该可以满足您的需求。

      SourceForge 上还有一个非常相似(也是非常好的工具),名为 Refractor,它也会显示依赖关系图。

      【讨论】:

      • 谢谢! Reflector 允许我像我想要的那样浏览依赖项——使用分析器的 Depends On 部分。图表并没有真正描绘出我想要的东西。当我有更多时间时,我可能会考虑制作一个插件。感谢您的帮助!
      【解决方案3】:

      NDepend 分析 dll 并显示类之间的依赖关系图,这是一个很棒的(但不是免费的)代码分析工具。他们有一个试用版,您可以使用几个月,所以您可以试一试。

      【讨论】:

      • 感谢您的建议。我看了一下 NDepend,虽然它给了我一大堆有趣的可视化,但它实际上并没有回答我的基本问题:如果我想测试 X 类,我还需要测试哪些其他类(以及以什么顺序)。部分原因可能是试用版有点受限,但我不会购买可能有用的东西。
      • 我相信它确实没有向您显示图表。试用不受限制,因此这显然不是适合您的工具,对此深表歉意!
      【解决方案4】:

      您可以尝试 Visual Studio 2010 Ultimate 的 RC 版本来为 .NET 代码生成依赖关系图。您可以生成所有程序集、命名空间、类或它们的某种组合的图表,或者您可以使用架构资源管理器来选择特定的工件和您想要可视化的关系:

      如何:从代码生成图形文档http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

      您可以使用 Visual Studio Ultimate 来探索现有代码中的关系和组织,方法是 生成有向图文档。这些图表表示代码元素及其关系 作为通过链接或边连接的一组节点。您可以使用这些图表来帮助您 可视化、探索和分析代码。

      如何:使用 Architecture Explorer 查找代码http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

      您可以选择要可视化的代码的垂直部分或“切片” 架构探索者。您可以在 Visual Studio 解决方案中探索源代码,或者 在 .dll 文件或 .exe 文件中编译托管代码。您可以使用 Architecture Explorer 浏览 通过安装其他提供程序来访问其他域。当你找到你想要的代码时 可视化,您可以生成图表来探索该代码中的关系。

      RC 下载http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a.

      Visual Studio 2010 架构发现和建模工具论坛:http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-24
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        • 2010-11-25
        • 1970-01-01
        相关资源
        最近更新 更多