使用 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/