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()
找到所有用法
使用 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()