c# - Roslyn:获取第三方库中定义的类型的符号

标签 c# roslyn

使用 Roslyn/Microsoft.CodeAnalysis,如何获取第三方类型的 ISymbol,即在不属于解决方案的引用程序集中定义的类型? 在我的特定情况下,我正在寻找 JSON.NET 的 JObject,但实际上同样的问题对于 BCL 内容(如 StringBuilder 等)也是有效的。

到目前为止,我唯一的想法是实现一个 CSharpSyntaxWalker,它查找所有方法调用、属性访问和构造函数调用,检查它们是否是在我感兴趣的类型上进行的,如果是,则获取来自相应 SyntaxNode 的符号。 我现在要实现这个,但它看起来非常麻烦。我认为一定有更好的方法,但我的 google-fu 没有产生任何相关结果。

也许关于背景:我正在尝试做的是用另一个类的用法替换 JObject 的用法。

最佳答案

如果您可以访问Compilation,您可以调用Compilation.GetTypeByMetadataName()并传入符号的完全限定元数据名称。

小心嵌套类和泛型,它们的元数据名称与普通的完全限定名称不同。更多信息请参阅:Having a "+" in the class name?

获得符号后,您可以通过 SymbolFinder.FindAllReferences() 找到所有用法

关于c# - Roslyn:获取第三方库中定义的类型的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33374777/

相关文章:

c# - Roslyn - 使用 CSharpCompilation 编译程序集,以便在 CSharpCompilation 编译的另一个程序中使用

c# - Roslyn 在 ObjectCreationExpressionSyntax 中获取 IdentifierName

c# - 在 Windows Phone 中隐藏应用程序栏

c# - App.Config文件中appSettings中LockItem属性的作用是什么?

c# - DisplayFor 的 IEnumerable<T> 类型 View 模型的 Razor 语法

c# - Roslyn (Lambda) 表达式主体属性语法

c# - 通过散列来改进集合比较(过于聪明..?)

c# - 443 端口的备用端口是什么?

c# - 如何使用 Roslyn 获取编译时间常量值

c# - 将可移植类库迁移到新的 DNX 共享库?