c# - .NET 反射 : Find used types

标签 c# .net reflection

我一直在努力解决这个问题。我试图做的是构建一个“ map ”,说明对象在我正在处理的一些代码中的使用方式。将其视为增强的 Find Usages。展示这一点的最简单方法是通过示例:

public class MasterClass
{
    Type1 type1;
    Type2 type2;
    Type3 type3;
    void InitializeData()
    {
        type1 = new Type1(this);
        type2 = new Type2(this);
        type3 = new Type3(this);
    }
}

public class Type1
{
    private MasterClass _master;
    public Type1(MasterClass master)
    {
        _master = master;
    }
    public void Something()
    {
        //use _master.type2 and _master.type3 here
    }
}

public class Type2
{
    private MasterClass _master;
    public Type2(MasterClass master)
    {
        _master = master;
    }
    public void Something()
    {
        //use _master.type3 here
    }
}

public class Type3
{
    private MasterClass _master;
    public Type3(MasterClass master)
    {
        _master = master;
    }
    public void Something()
    {
        //use _master.type1 and _master.type2 here
    }
}

我想要做的是获取一个映射或报告,在示例的情况下,它会给出如下内容:

Type1 被使用:{Type3}

Type2 被使用:{Type1, Type3}

Type3 被使用:{Type1, Type2}

如果我能把它写进字典,那我就回家了。 :-)

我尝试过的:

我已经尝试检查程序集、每种类型、每种方法,然后提取 IL 数组,然后尝试解析操作数,但没有成功。我什至尝试过使用一些正则表达式检查源文件,但我有数千个类要检查,以几种不同的风格编写,这意味着我会遗漏一些引用。

我可以使用 Reflector &&/|| Resharper 一次获取一个引用,但我想一次获取所有引用。

有什么建议吗?

最佳答案

我建议使用 NDepend为此,因为它是针对您所描述的问题量身定制的。在代码中执行此操作需要大量工作。

关于c# - .NET 反射 : Find used types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1975702/

相关文章:

c# - 将委托(delegate)/命令作为参数传递给 MVVM 中的另一个命令

c# - C# 的部分类是糟糕的设计吗?

c# - 什么是cvtres.exe?

c# - 如何将类型与另一个程序集中的工厂例程配对?

java - 何时使用 Java Reflection API,何时不使用

java - 创建 TypeVariable 实例

c# - 如何创建包含两个具有相同结构的数据表的比较结果的数据表?

c# - 处理潜在 session 过期的正确方法

c# - 我如何告诉我的 .NET 程序集 COM 对象的详细信息存储在注册表中的哪个位置?

c# - JIT 优化 : Why Is It Slow and How Can I Improve It?