如何使用Roslyn解析C#代码片段并验证解析是否成功?
检查Roslyn解析C#代码是否成功的方法
用Roslyn解析C#代码后,判断解析是否成功的核心是检查语法树返回的诊断信息(Diagnostics)——因为ParseText方法即使遇到语法错误也会生成语法树,只是会附带错误诊断,所以得筛选出错误级别的项来判断。
具体步骤
- 调用语法树的
GetDiagnostics()方法获取所有诊断信息 - 筛选出
Severity为DiagnosticSeverity.Error的项,如果没有这类项,说明解析成功
示例代码(带检查逻辑)
var tree = CSharpSyntaxTree.ParseText(@" class TestClass { void TestMethod () { int i; } }"); // 获取所有诊断信息 var diagnostics = tree.GetDiagnostics(); // 判断是否存在错误级别的诊断 var hasParseErrors = diagnostics.Any(diagnostic => diagnostic.Severity == DiagnosticSeverity.Error); if (!hasParseErrors) { Console.WriteLine("代码解析成功"); } else { Console.WriteLine("解析失败,存在以下语法错误:"); foreach (var error in diagnostics.Where(d => d.Severity == DiagnosticSeverity.Error)) { Console.WriteLine($"- 错误内容:{error.GetMessage()},位置:{error.Location.GetLineSpan()}"); } }
补充说明
- 诊断信息的
Severity分为Error、Warning、Info、Hidden四个级别,只有Error代表解析失败(语法错误导致无法正确构建语法树) - 像示例中未使用的变量
i会被标记为Warning,这类情况属于代码规范问题,不影响解析成功的判断
内容的提问来源于stack exchange,提问作者Saikat Mondal
相关产品推荐
相关产品推荐

