2

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

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我想访问分析器当前正在处理的类型,以检查该类型是否由我想用来标记不应分析的类型的某个属性归因(如在这个问题中)。

在我的本地窗口中,我看到SyntaxNodeAnalysisContext context有一个名为的属性ContainingSymbol,但是该成员没有出现在 Intellisense 中。我想出了猜测var x = ...,但它总是等价的吗?我怎样才能ContainingSymbol访问context?这是获得封闭类型的正确方法吗?

当地人窗口

4

1 回答 1

2

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

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

于 2016-05-03T13:39:07.597 回答