簡體   English   中英

Roslyn:獲取第三方庫中定義的類型的符號

[英]Roslyn: get the symbol for a type defined in a third-party library

使用 Roslyn/Microsoft.CodeAnalysis,如何獲取第三方類型的ISymbol ,即在不屬於解決方案的引用程序集中定義的類型? 在我的特殊情況下,我正在尋找 JSON.NET 的 JObject,但實際上同樣的問題對於 BCL 的東西(如 StringBuilder 等)也是有效的。

到目前為止,我提出的唯一想法是實現一個 CSharpSyntaxWalker,它查找所有方法調用、屬性訪問和構造函數調用,檢查它們是否是在我感興趣的類型上進行的,如果是,則從各自的 SyntaxNode。 我現在要實現這個,但它看起來非常麻煩。 我認為必須有更好的方法,但是我的 google-fu 沒有產生任何相關結果。

也許關於背景:我想要做的是用另一個類的用法替換 JObject 的用法。

如果您可以訪問Compilation ,則可以調用Compilation.GetTypeByMetadataName()並傳入符號的完全限定元數據名稱。

小心嵌套類和泛型,它們的元數據名稱與正常的完全限定名稱不同。 有關更多信息,請參閱: 類名中有“+”?

獲得符號后,您可以通過SymbolFinder.FindAllReferences()找到所有用法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM