使用Roslyn / Microsoft.CodeAnalysis,如何获得第三方类型的ISymbol
,即引用程序集中定义的类型不是解决方案的一部分?
在我的特殊情况下,我正在寻找JSON.NET的JObject,但实际上同样的问题对于像StringBuilder等BCL这样的东西也是有效的。
我到目前为止唯一的想法是实现一个CSharpSyntaxWalker,它查找所有方法调用,属性访问和构造函数调用,检查它们是否对我感兴趣的类型I以及是否感兴趣。是的,从相应的SyntaxNode获取符号。 我现在要实现这个,但它看起来非常麻烦。我认为必须有一个更好的方法,但我的google-fu没有产生任何相关的结果。
可能关于背景:我试图做的是将JObject的用法替换为另一个类的用法。
答案 0 :(得分:6)
如果您可以访问Compilation
,则可以致电Compilation.GetTypeByMetadataName()
并传递该符号的完全限定元数据名称。
注意嵌套类和泛型,它们的元数据名称与普通的完全限定名称不同。有关详情,请参阅:C# : having a "+" in the class name?
获得符号后,您可以通过SymbolFinder.FindAllReferences()