亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Roslyn Analyzer 標記屬性的返回類型

Roslyn Analyzer 標記屬性的返回類型

C#
智慧大石 2021-11-07 20:35:23
我正在為 Roslyn 編寫一個需要標記屬性返回類型的分析器。我有它標記屬性聲明本身。我已經查看了調試器,但找不到針對返回類型標記的位置。例子:// important code for analzyerpublic 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 workingpublic 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().
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

context.Node 指定了一些其他覆蓋整個屬性的跨度,但它不是一個完整的 Location 對象,所以我不能使用它們。


答案在于Location從 a創建a TextSpan。為此,您可以Location.Create()在語法樹和跨度中使用which 。兩者都可以通過context.Node酒店獲得。


var propertyTypeIdentifier = ((PropertyDeclarationSyntax) context.Node).Type;


name = propertyType.Name;

location = Location.Create(propertyTypeIdentifier.SyntaxTree, propertyTypeIdentifier.Span);



查看完整回答
反對 回復 2021-11-07
  • 1 回答
  • 0 關注
  • 215 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號