我正在尝试使用Roslyn确定项目的公开API(然后使用这些信息进行进一步处理,因此我不能只使用反射)。我正在使用SyntaxWalker来访问声明语法节点,并为每个节点调用IModel.GetDeclaredSymbol方法。这似乎对于方法、属性和类型很有效,但似乎无法在字段上工作。我的问题是,如何获取FieldDeclarationSyntax节点的FieldSymbol?
这是我正在使用的代码:
public override void VisitFieldDeclaration(FieldDeclarationSyntax node)
{
var model = this._compilation.GetSemanticModel(node.SyntaxTree);
var symbol = model.GetDeclaredSymbol(node);
if (symbol != null
&& symbol.CanBeReferencedByName
// this is my own helper: it just traverses the publ
&& symbol.IsExternallyPublic())
{
this._gatherer.RegisterPublicDeclaration(node, symbol);
}
base.VisitFieldDeclaration(node);
}