- Roslyn Cookbook
- Manish Vasani
- 226字
- 2021-07-15 17:07:32
How to do it...
- In Solution Explorer, double-click on the Resources.resx file in CSharpAnalyzers project to open the resource file in the resource editor.
- Replace the existing resource strings for AnalyzerDescription, AnalyzerMessageFormat and AnalyzerTitle with new strings.

- Replace the Initialize method implementation with the following:
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeAction(syntaxTreeContext =>
{
// Iterate through all statements in the tree.
var root = syntaxTreeContext.Tree.GetRoot(syntaxTreeContext.CancellationToken);
foreach (var statement in root.DescendantNodes().OfType<StatementSyntax>())
{
// Skip analyzing block statements.
if (statement is BlockSyntax)
{
continue;
}
// Report issue for all statements that are nested within a statement,
// but not a block statement.
if (statement.Parent is StatementSyntax && !(statement.Parent is BlockSyntax))
{
var diagnostic = Diagnostic.Create(Rule, statement.GetFirstToken().GetLocation());
syntaxTreeContext.ReportDiagnostic(diagnostic);
}
}
});
}
- Click on Ctrl + F5 to start a new Visual Studio instance with the analyzer enabled.
- In the new Visual Studio instance, create a new C# class library with the following code:
namespace ClassLibrary
{
public class Class1
{
void Method(bool flag, int value)
{
while (flag)
if (value > 0)
System.Console.WriteLine(value);
}
}
}
- Verify the analyzer diagnostic is neither reported for the method block for Method nor the while statement, but is reported for the if statement and System.Console.WriteLine invocation statement:

- Now, add curly braces around the System.Console.WriteLine invocation statement and verify the only single warning is now reported for the if statement:

推薦閱讀
- C語言程序設計案例教程
- Python概率統計
- Java EE 6 企業級應用開發教程
- What's New in TensorFlow 2.0
- 潮流:UI設計必修課
- 微服務與事件驅動架構
- Haxe Game Development Essentials
- Terraform:多云、混合云環境下實現基礎設施即代碼(第2版)
- 基于ARM Cortex-M4F內核的MSP432 MCU開發實踐
- Mastering Linux Security and Hardening
- Web App Testing Using Knockout.JS
- Clojure for Java Developers
- Illustrator CS6設計與應用任務教程
- Go語言入門經典
- Swift High Performance