2016-05-02 7 views
2

I私のアナライザ私は、次の登録があります。私はかどうかを確認するために、アナライザが現在処理しているタイプにアクセスしたいHandleTypeDeclarationHandleTypeDeclaration(...)にSyntaxNodeAnalysisContextからタイプを囲むゲット

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); 
    ... 
} 

をタイプは、(this questionのように)分析すべきでないタイプをマークするために使用したいいくつかの属性に起因していました。

私の地元の窓で私はにはContainingSymbolという名前のプロパティがありますが、このメンバーはIntellisenseには表示されません。私は推測を思い付いたvar x = ...しかし、それは常に同等ですか? contextContainingSymbolにアクセスするにはどうすればよいですか?囲むタイプを得るのは正しい方法ですか?バージョン1.0.0では

locals window

+0

あなたの参照CodeAnalysisナゲットパッケージのバージョンは?あなたのVSがアップデート2を持っている間は、おそらく最新の1.2バージョンではないでしょう。 – Tamas

+0

@ Tamas-SonarSourceTeam:Microsoft.CodeAnalysis.Commonおよび.CSharpは1.0.0(最新は1.2.1)で、microsoft.CodeAnalysis.Analyzersは1.0.0です(最新は1.1.0) – David

+1

を参照してください。バージョン1.0.0では、 'SyntaxNodeAnalysisContext'はプロパティ' ContainingSymbol'を含んでいませんでした。 VSには、すでにそれが含まれている更新プログラムがあるために表示されます。下位互換性の要件がない場合は、1.2.1にアップグレードしてそのプロパティを使用できます。 – Tamas

答えて

2

SyntaxNodeAnalysisContextは、プロパティContainingSymbolが含まれていませんでした。 VSには、すでにそれが含まれている更新プログラムがあるために表示されます。

VS 2015 RTMまでの下位互換性の要件がある場合、Roslyn 1.0で動作するcontext.SemanticModel.GetDeclaredSymbol(context.Node)を使用する以外の方法はありません。これは、より新しいRoslynバージョンでcontext.ContainingSymbolに相当するはずです。

関連する問題