最近有需求 要写工具检查 代码方法中有没有存在一些类型或者委托  随便记录下

因为需要检查Method Body 普通反射已经无法满足,使用了Mono.Cecil这个库,感觉非常强大

Mono.Cecil

通过设置 ReaderParameters

ReadSymbols

可以读取pdb文件

常见的应用有

获取方法所在文件位置


var readerParameters = new ReaderParameters { ReadSymbols = true };//ReadSymbols  读取pdb
AssemblyDefinition assemblyDef = AssemblyDefinition.ReadAssembly(assembly.Location, readerParameters);static string GetSourceFilePath(TypeDefinition type){string path = null;foreach (var method in type.Methods){if (method.HasBody){//通过方法的断点信息 获取到文件位置var seqPointDict = method.DebugInformation.GetSequencePointMapping();foreach (var seqPair in seqPointDict){return seqPair.Value.Document.Url;}}}return path;}

AssemblyResolver

获取TypeReference的具体类型 TypeDefinition

因为在方法中查找类型的时候经常只能拿到TypeReference,想知道类型内部更多信息,比如方法、属性之类的,仅靠TypeReference是不够的

必须拿到TypeDefinition才可以,TypeReference.Resolve()是可以找到TypeDefinition,但是,如果这个类型是跨Assembly的,此时就需要对ReaderParameter进行设置

否则就取不到,抛出异常

添加上需要的所有Assembly所在文件夹的路径即可

var resolver = new DefaultAssemblyResolver();resolver.AddSearchDirectory("在此设置dll路径");var readerParameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = resolver };

Mono.Cecil ReaderParameters相关推荐

  1. 使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model

    使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model 2011-09-06 00:21 by 老赵, 8645 visits 这也是之前在珠三角技术沙龙上的示例之一,解决 ...

  2. 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)

    原文:利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习) Mono.Cecil是一个强大的MSIL的注入工具,利用它可以实现动态创建程序集,也可以实现拦截器横向切入动态方法,甚至还 ...

  3. 巧用Mono.Cecil反射加载类型和方法信息

    最近在做服务的细粒度治理,统一管理所有服务的方法.参数.返回值信息.方便后续的各个模块之间的对接和协作. 目前系统中所有的服务,管理到接口契约粒度,即服务接口声明和服务接口实现.要做服务的细粒度治理: ...

  4. 编译时MSIL注入--实践Mono Cecil(1)

    紧接上两篇浅谈.NET编译时注入(C#-->IL)和浅谈VS编译自定义编译任务-MSBuild Task(csproject),在第一篇中我们简单研究了c#语法糖和PostSharp的MSIl注 ...

  5. 运用Mono.Cecil 反射读取.NET程序集元数据

    CLR自带的反射机智和API可以很轻松的读取.NET程序集信息,但是不能对程序集进行修改.CLR提供的是只读的API,但是开源项目Mono.Cecil不仅仅可以读取.NET程序集的元数据,还可以进行修 ...

  6. Mono.Cecil使用示例之使指定程序集成为UnityEditor.dll的友元程序集

    Mono.Cecil使用示例之使指定程序集成为UnityEditor.dll的友元程序集 Mono.Cecil是一个开源的库,使用Mono.Cecil可以非常方便的在代码中修改C#程序集.在Unity ...

  7. Mono.Cecil C#代码注入

    先标记下 有时间再写 转载于:https://www.cnblogs.com/docomo/archive/2013/06/06/3122157.html

  8. 基于mono.ceil对c#进行注入垃圾代码,混淆代码,IL代码注入

    前言 unity的c#层,编译处理的程序集Assembly_CSharp.dll,通过dnspy反编译出来,可以看到自己写的代码,代码也是公司的财产(大雾,这不是我说的),但是开发项目过程中,有什么方 ...

  9. Mono 2.0正式发布了

    Mono官网:http://mono-project.com/ 2.0 Release Notes: http://www.mono-project.com/Release_Notes_Mono_2. ...

  10. 几篇关于Cecil混淆程序集的文章

    Paul Mason (via Chris Alcock)几篇关于保护源码和利用Cecil混淆演示的文章 Protecting your precious code!, Protecting your ...

最新文章

  1. Flutter开发之iOS真机调试(六)
  2. debian var目录
  3. hdu 5072 Coprime
  4. 天翼云从业认证课后习题(3.3天翼云网络产品)
  5. 【ARM】Tiny4412裸板编程之MMU(段 16M)
  6. JAVA安装作用_jdk安装配置及其作用
  7. php 字符串函数 教程_PHP 字符串获取 substr 与 strstr 函数
  8. 那些年,我们见过的 Java 服务端“问题”
  9. 杂七杂八DataTable获取Table某一列成List转换Table成List
  10. linux下 gdb+coredump 调试偶发crash的程序
  11. requests第三方库在测试中的使用
  12. BI—SSIS初步认识
  13. 【Proteus仿真】波形信号发生器(4种波形可选,频率可调)
  14. 修改input提示文字样式
  15. 正则去除html标签和空字符,正则表达式清除空格和html标签中的 空格
  16. 小马虎想用计算机计算396乘19,四年级上册数学精选练习题
  17. P5.JS绘制动态图形
  18. 【Docker之Swarm详细讲解Swarm集群搭建管理节点工作节点Raft一致性协议overlay网络Docker结合Swarm部署WordPress个人博客实战】
  19. 为什么要开发问卷调查APP?
  20. nginx日志格式配置

热门文章

  1. 贪玩蓝月角色服务器找不到了,贪玩蓝月合服角色处理方法曝光
  2. mapbox-gl:创建Marker
  3. 【WebIDE】 code-server 使用 vscode 原生插件市场地址
  4. 50内的勾股数java_学习知识:50以内勾股数有哪些
  5. BD-rate计算方法
  6. [转]音乐天堂 Music Heaven Vol.1 ~ Vol.36 的目录
  7. c# 金额小写转大写(财务金额)
  8. 国内就能读的中国人民大学与加拿大女王大学金融硕士,为职业发展的下一个阶段积蓄能量
  9. 使用Axis2创建一个Web Service的客户端 - 子非鱼,安知鱼之乐? - CSDNBlog
  10. openwrt-mt7628 wds配置