首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从.NET获取Mono.Cecil类型

从.NET获取Mono.Cecil类型
EN

Stack Overflow用户
提问于 2020-07-05 20:25:27
回答 1查看 452关注 0票数 1

我正在开发一个.NET应用程序。在我的应用程序中,我必须检查程序集中的类型是否实现了特定的接口。我的程序集有一个来自NuGet包(依赖项)的包,所以我使用Mono.Cecil获取程序集中的所有类型。守则是:

代码语言:javascript
复制
ModuleDefinition module = ModuleDefinition.ReadModule(assemblyPath);
Collection<TypeDefinition> t1 = module.Types;

问题是Mono.Cecil返回的是Mono.Cecil而不是类型。那么,我是否可以将集合中的每个TypeDefinition转换为.NET Type,以便轻松地检查该类型是否实现了特定的接口?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-07-05 21:10:09

如果您可以使用接口的全名,那么您不需要TypeTypeDefinition就足够了。示例(在F#中):

代码语言:javascript
复制
let myInterface = "Elastic.Apm.Api.ITracer"

let implementsInterface (t : Mono.Cecil.TypeDefinition) =
  t.HasInterfaces
  && t.Interfaces |> Seq.exists (fun i -> i.InterfaceType.FullName = myInterface)

let getTypes assemblyFileName =
  Mono.Cecil.AssemblyDefinition
    .ReadAssembly(fileName = assemblyFileName).MainModule.Types
  |> Seq.filter implementsInterface
  |> Seq.map (fun t -> t.FullName)
  |> Seq.toArray

let ts = getTypes assemblyFile
printfn "Types implementing %s: %A" myInterface ts
// Output:
// Types implementing Elastic.Apm.Api.ITracer: [|"Elastic.Apm.Api.Tracer"|]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62745949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档