从HandleTypeDeclaration(...)

时间:2016-05-02 07:41:05

标签: c# roslyn roslyn-code-analysis

我的分析仪我有以下注册:

public override void Initialize(AnalysisContext context)
{
  context.RegisterCompilationStartAction(HandleCompilationStart);
}

private static void HandleCompilationStart(CompilationStartAnalysisContext context)
{
  context.RegisterSyntaxNodeAction(
    HandleTypeDeclaration,
    ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration));
}

private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
{
  var x = context.SemanticModel.GetDeclaredSymbol(context.Node);
  ...
}

HandleTypeDeclaration中我想访问分析器当前正在处理的类型,以便检查类型是否由某些属性归因于我想要用来标记不应该分析的类型(例如{{3} }})。

在我的本地窗口中,我看到SyntaxNodeAnalysisContext context有一个名为ContainingSymbol的属性,但该成员没有出现在Intellisense中。我提出了猜测var x = ...,但它总是相同的吗?如何在ContainingSymbol上访问context?获取封闭类型是否正确?

this question

1 个答案:

答案 0 :(得分:2)

在版本1.0.0中,SyntaxNodeAnalysisContext不包含属性ContainingSymbol。 VS看到它,因为你有一个已经包含它的更新。

如果您在VS 2015 RTM之前有向后兼容性要求,那么除了使用在Roslyn 1.0中有效的context.SemanticModel.GetDeclaredSymbol(context.Node)之外别无选择。这应该等同于较新的Roslyn版本中的context.ContainingSymbol