ISymbol

问题描述

我正在使用 Microsoft.CodeAnalysis.PublicApiAnalyzers获取我的应用的公共 api 的文本表示。公共 api 的文本,例如类 A 的认构造函数,是 A.A() -> void

分析器的源代码使用此方法 ApiName GetPublicApiName(ISymbol symbol)生成 api 的文本表示。在内部,此方法使用 ISymbol.ToDisplayString 来构造文本表示。

给定一个文本表示,我想从中创建一个 ISymbol 实例。 但我找不到一个 api 来做到这一点,比如 ISymbol Parse(string)ISymbol CreateFromText(string) Microsoft.CodeAnalysis 中是否存在这样的 api 我只是没有找到它,还是应该尝试不同的方法

解决方法

没有公共 API 可以从 Roslyn 中的字符串生成符号。您可以创建语法节点,将它们传递给编译对象,并从该编译中获取符号,但如果没有文本或句法表示,则无法生成符号。

如果您的目标是在没有任何句法表示的情况下生成类型,我会研究 cecil

如果您确实想生成具有底层语法的类型,我会查看 roslyn 报价网站 here