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

时间:2015-10-27 17:32:47

标签: c# roslyn

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

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

可能关于背景:我试图做的是将JObject的用法替换为另一个类的用法。

1 个答案:

答案 0 :(得分:6)

如果您可以访问Compilation,则可以致电Compilation.GetTypeByMetadataName()并传递该符号的完全限定元数据名称。

注意嵌套类和泛型,它们的元数据名称与普通的完全限定名称不同。有关详情,请参阅:C# : having a "+" in the class name?

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

找到所有用法