我正在为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
显然,我在.NET标准中使用vs 2017进行这项工作很重要。.NET 4.5分析器可以通过
MSBuildWorkspace
和
SymbolFinder
类,但.NET标准没有
MSBuildWorkspace
因为某些原因,所以我无法将当前的解决方案传递给
SymbolFinder.FindReferencesAsync()
.