使用Roslyn / Microsoft.CodeAnalysis,我如何获得第三方类型的ISymbol,即在引用的程序集中定义的类型,它不是解决方案的一部分?
在我的特殊情况下,我正在寻找JSON.NET的JObject,但实际上同样的问题对于像StringBuilder等BCL这样的东西也是有效的.
我到目前为止唯一的想法是实现一个CSharpSyntaxWalker,它查找所有方法调用,属性访问和构造函数调用,检查它们是否是我感兴趣的类型,如果是,则从中获取符号各自的SyntaxNode.
我现在要实现这个,但它看起来非常麻烦.我认为必须有更好的方法,但我的google-fu没有产生任何相关的结果.
也许关于背景:我正在尝试做的是将JObject的用法替换为另一个类的用法.
解决方法:
如果您可以访问编译,则可以调用Compilation.GetTypeByMetadataName()
并传入符号的完全限定元数据名称.
注意嵌套类和泛型,它们的元数据名称与普通的完全限定名称不同.有关更多信息,请参阅:C# : having a “+” in the class name?
获得符号后,您可以通过SymbolFinder.FindAllReferences()
找到所有用法
标签:c,roslyn 来源: https://codeday.me/bug/20190528/1168725.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。