![](/img/trans.png)
[英]How to get to Workspace in DiagnosticAnalyzer and CodeFixProvider? (Roslyn)
[英]Roslyn - CodeFixProvider is being fired but DiagnosticAnalyzer not for class destructor
分析儀的偽代碼
我的測試課:
public class TestClass
{
~TestClass()
{
}
}
我的帶有分析方法的診斷分析器類:
public class TestClassAnalyzer : DiagnosticAnalyzer
{
public const string AnalyzerId = "TestId";
...
private static void AnalyzeSymbol(SymbolAnalysisContext context)
{
var methodDeclaration = (IMethodSymbol)context.Symbol;
if (methodDeclaration.MethodKind == MethodKind.Destructor)
{
return;
}
context.ReportDiagnostic(Diagnostic.Create(...));
}
}
我的代碼修復提供程序具有修復方法:
public class TestClassCodeFixProvider : CodeFixProvider
{
public sealed override ImmutableArray<string> FixableDiagnosticIds =>
ImmutableArray.Create(TestClassAnalyzer.AnalyzerId);
...
private async Task<Solution> PerformFixAsync(Document document, ...)
{
...
return await Renamer.RenameSymbolAsync(...)
}
}
如果我在TestClassAnalyzer類中的帶檢查析構函數的行后放置一個斷點,那么我的代碼將永不停止/中斷,這對我來說很有意義,因為我跳出了帶有return關鍵字的方法。 不過,我的代碼修復程序已被觸發(我可以將斷點放在PerformFixAnync方法內,並在其中停止/中斷代碼),並且可以看到紅色的波浪狀。
有人知道為什么不啟動代碼修復程序嗎?
我猜您的分析儀由於條件錯誤而早日返回了描述者:
if (methodDeclaration.MethodKind == MethodKind.Destructor)
{
return;
}
context.ReportDiagnostic(Diagnostic.Create(...));
在條件塊中否定條件或報告條件:
if (methodDeclaration.MethodKind != MethodKind.Destructor)
{
return;
}
context.ReportDiagnostic(Diagnostic.Create(...));
事實證明,我的解決方案包含一個埋在文件夾之間某個地方的類,該類中帶有一些沒有析構函數檢查條件的舊代碼,這引起了麻煩。 此類不是TFS中源事件的一部分...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.