C# 反射并查找所有引用

2023-11-21

给定一个 DLL 文件,我希望能够找到对该 DLL 文件中某个方法的所有调用。我怎样才能做到这一点?

本质上,我如何以编程方式完成 Visual Studio 已经完成的工作?

我不想使用像这样的工具.NET反射器要做到这一点,但反思是可以的,而且可能是必要的。


找出方法在哪里MyClass.Foo()使用时,您必须分析引用包含以下内容的程序集的所有程序集的所有类MyClass。我写了一个简单的概念证明来证明这段代码的样子。在我的例子中我使用了这个图书馆(只是单个 .cs 文件)由 Jb Evain 撰写:

我写了一个小测试类来分析:

public class TestClass
{
    public void Test()
    {
        Console.WriteLine("Test");
        Console.Write(10);
        DateTime date = DateTime.Now;
        Console.WriteLine(date);
    }
}

我编写了这段代码来打印出其中使用的所有方法TestClass.Test():

MethodBase methodBase = typeof(TestClass).GetMethod("Test");
var instructions = MethodBodyReader.GetInstructions(methodBase);

foreach (Instruction instruction in instructions)
{
    MethodInfo methodInfo = instruction.Operand as MethodInfo;

    if(methodInfo != null)
    {
        Type type = methodInfo.DeclaringType;
        ParameterInfo[] parameters = methodInfo.GetParameters();

        Console.WriteLine("{0}.{1}({2});",
            type.FullName,
            methodInfo.Name,
            String.Join(", ", parameters.Select(p => p.ParameterType.FullName + " " + p.Name).ToArray())
        );
    }
}

它给了我以下输出:

System.Console.WriteLine(System.String value);
System.Console.Write(System.Int32 value);
System.DateTime.get_Now();
System.Console.WriteLine(System.Object value);

这个示例显然还远远不够完整,因为它不处理 ref 和 out 参数,也不处理泛型参数。我确信他也忘记了其他细节。它只是表明它可以做到。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 反射并查找所有引用 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 如何以编程方式创建适用于 XP、Vista 和 Windows 7 的文件关联

    我希望能够从我的程序注册我的文件扩展名 将文件类型与我的程序关联起来 有很多关于此的文章 但据我所知 所讨论的技术 摆弄注册表 仅适用于 Windows XP 将文件类型与程序关联起来使其在 XP Vista 和 Windows 7 下也能
  • 您无权写入文件“ostream”所在的文件夹

    I had an error while editing a C file and Xcode put out a suggestion I clicked fix and I ve been getting this pop up eve
  • 如何在常用的 java 代码中运行 OSGi 框架?

    有人能给我一个如何使用 osgi 框架类的例子吗 我不知道如何使用这些课程 BR Markus 这取决于您使用的 OSGi 实现 我使用 Eclipse Equinox 并从常规 java 类中启动该框架 Eclipse jar 名为 or
  • iOS7 Tableview删除行最佳实践

    在 iPhone 上 有一个教科书示例 介绍如何删除消息应用程序中的表格视图行 这似乎使用三个单独的视图来执行任务 我的问题是 是否有捷径可以实现这一目标 或者您是否只是创建三个屏幕并做一些显而易见的事情 非常感谢 从故事板中删除一行非常简
  • 如何查看 HttpContext.Cache 中的内容

    有没有什么好的工具可以查看我的数据中有多少数据 或者更好的是该数据的值 HttpContext Cache Isis是 ASP NET 应用程序的控制面板 可以轻松查看应用程序的程序集 调试与否 日志记录 错误 cache 会话 性能计数器
  • 优雅关闭asp.net core

    遇到有关 ASP NET Core 应用程序正常关闭的非常过时的信息 有人可以填写更新的信息吗 用例 我想在应用程序退出时取消向领事注册 public static IWebHostBuilder CreateWebHostBuilder
  • keycloak apache 服务器配置存在“混合内容”问题

    在我的 apache 服务器后面配置 keycloak 时遇到问题 混合内容 页面位于 https dev mydomain com auth admin master console 已加载完毕 HTTPS 但请求了不安全的脚本 http
  • iPhone 支持 XML-RPC 吗?

    iPhone 是否支持 XML RPC 他们有我可以使用的开源框架吗 查看 WordPress 应用程序的源代码 他们可能正在使用 XML RPC http iphone wordpress org
  • 车把访问全局变量:if 语句

    我有一个 hbs 模板 其中有一个对象数组和一个布尔切换变量 切换模板行为 比方说 objs list mode true 我无法访问mode循环内时变量objs 上下文已更改 我想要的是使用 upper 变量创建一个 if 语句 我发现我
  • 在 Entity Framework 4.1 Code First 中创建双向一对一关系

    我想使用 EF Code First 在两个实体之间创建双向一对一关系 我在使用以下代码时遇到问题 你觉得我应该怎么做 public class User public string ID get set public string Las
  • Android ViewGroup.setScaleX() 导致视图被裁剪

    I use 九老机器人库来缩放我的自定义布局 public class MyLayout extends FrameLayout LayoutParams MATCH PARENT and all Override public boole
  • 为什么 numpy 向量化函数显然被称为额外时间?

    我有一个 numpy 对象数组 其中包含多个索引号列表 gt gt gt idxLsts np array 1 0 2 dtype object 我定义了一个向量化函数来向每个列表附加一个值 gt gt gt idx 99 gt gt gt
  • 使用 XSL 提取 XML 文件的子集

    我有这个 XML 文件
  • 如何在 MATLAB 中使用最小二乘近似?

    对于线性代数的家庭作业 我使用 MATLAB 求解了以下方程 运算符 这是推荐的方法 A 0 2 0 25 0 4 0 5 0 4 0 25 y 0 9 1 7 1 2 x A y 产生以下答案 x 1 7000 2 0800 对于作业的下
  • Backbone.Marionette 中项目视图和布局中的额外 div

    我正在尝试 Backbone Marionette 但我很困惑为什么我的布局和 ItemView 不断生成额外的 div 顺便说一句 例子是咖啡 AppLayout Backbone Marionette Layout extend tem
  • 使用 Rails 3 在 Heroku 上运行 Gmail

    我正在尝试从 Heroku 发送电子邮件并运行 目前我可以通过 教程 从 Heroku 发送电子邮件 http blog heroku com archives 2009 11 9 tech sending email with gmail
  • 在运行时更新 Java 安全策略?

    是否有合法的方法可以在运行时添加 删除 Java 安全策略的权限 Javadoc 说Policy refresh 对于基于文件的策略将重新读取文件 因此 可以通过编辑策略文件然后调用来在运行时修改系统范围的策略Policy refresh
  • .*(点星)在 SQL 中意味着什么?

    什么是 SQL 中的意思 我在这个查询中看到了它 SELECT socialmedia kat stundenvorlagen socialmedia zielgruppen ziel benutzer socialmedia zielgr
  • 如何重置 Android studio 布局?

    我的 Android Studio 布局 我很伤心 因为我的 Android sutios 的布局很奇怪 在上面的截图中 如您所见 蓝色圆圈位置位于工作室的最右侧 我想把它移动到箭头所指的位置 但我不知道如何移动它 任何帮助将不胜感激 谢谢
  • C# 反射并查找所有引用

    给定一个 DLL 文件 我希望能够找到对该 DLL 文件中某个方法的所有调用 我怎样才能做到这一点 本质上 我如何以编程方式完成 Visual Studio 已经完成的工作 我不想使用像这样的工具 NET反射器要做到这一点 但反思是可以的