我正在为 Roslyn 编写一个需要标记属性返回类型的分析器。我有它标记属性声明本身。我已经查看了调试器,但找不到针对返回类型标记的位置。
例子:
// important code for analzyer
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxNodeAction(AnalyzeSyntax, SyntaxKind.MethodDeclaration, SyntaxKind.PropertyDeclaration);
}
private static void AnalyzeSyntax(SyntaxNodeAnalysisContext context)
{
var propertySymbol = context.ContainingSymbol as IPropertySymbol;
var propertyType = propertySymbol.Type;
if (propertyType.Name != "Class1") return;
var diagnostic = Diagnostic.Create(Rule, propertySymbol.Locations[0], propertyType.Name);
context.ReportDiagnostic(diagnostic);
break;
}
// example where it should be working
public class Usage
{
public Class1 Test { get; set; }
}
它目前在Usage.Test属性名称下放置绿色波浪线,但我希望它位于该属性的返回类型下。
该context.ContainingSymbol有一个Locations属性,但它只有在它指定一个位置,它指向专门为Test。在context.Node指定覆盖整个酒店,但它不是一个完整的其他几个跨度Location对象,所以我不能使用它们。
编辑 1
显然,使用 VS 2017 在 .Net Standard 中执行此操作很重要。.Net 4.5 分析器可以通过MSBuildWorkspace和SymbolFinder类访问用法,但是 .Net StandardMSBuildWorkspace出于某种原因没有,所以我无法获得当前解决方案传递给SymbolFinder.FindReferencesAsync().
宝慕林4294392
相关分类