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

Roslyn: get the symbol for a type defined in a third-party library

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

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

也许关于背景:我想做的是用另一个 class.

的用法替换 JObject 的用法

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

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

获得符号后,您可以通过 SymbolFinder.FindAllReferences()

找到所有用法