【发布时间】:2015-03-23 18:35:42
【问题描述】:
我在代码中使用ICSharpCode.Decompiler.Ast.AstBuilder(SharpDevelop、NRefactory 和 ILSpy 在后台使用它;也从那里获得灵感)从 .NET 通用中间语言程序集构建抽象语法树。
var assembly = AssemblyDefinition.ReadAssembly(assemblyPath);
var astBuilder = new AstBuilder(new DecompilerContext(assembly.MainModule));
astBuilder.AddAssembly(assembly);
// astBuilder.SyntaxTree ...
只要有像Math.Abs() 这样的行,语法树就会包含TypeReferenceExpressions。当引用类型的TypeDeclaration也存在于同一语法树中时,如何检索它?
我得到的最接近的是TypeReferenceExpression.Type.ToTypeReference().Resolve(),但编排起来非常繁重,而且我已经(我想)拥有语法树中的所有信息。我还尝试使用命名空间和标识符进行手动查找,但我想应该有更好的方法。
【问题讨论】:
-
您想要
TypeDeclaration还是TypeDefinition?根据我对这些 API 的回忆,在您的示例中调用Resolve()会生成定义(元数据),而不是声明(AST 节点)。 -
我想访问 TypeDeclaration(在同一语法树中)。但是你是对的,Resolve() 只返回元数据,所以这不是一个真正的选择。
标签: .net decompiling icsharpcode ilspy