如何在C#中编程检测字符串内的C#代码是否合法、无编译错误
实现方案说明
可以通过Roslyn API实现该需求,这也是目前校验C#代码语法、编译错误最官方准确的方案,无需加载完整项目即可完成单段代码字符串的校验。
具体实现步骤
- 首先安装NuGet依赖包:
Microsoft.CodeAnalysis.CSharp,可根据需要支持的C#版本选择对应的包版本。 - 语法校验:调用
CSharpSyntaxTree.ParseText(你的代码字符串)方法解析代码生成语法树,该步骤会返回语法层面的错误信息,例如括号不匹配、关键字拼写错误、语法结构不符合C#规范等问题。 - 编译(语义)校验:构造
CSharpCompilation实例,引入必要的基础运行时程序集(例如System.Runtime、netstandard等,哪怕代码无外部自定义引用,也需要int、string这类基础类型的定义支撑编译校验),之后调用编译实例的GetDiagnostics()方法获取所有诊断信息,只要存在错误级别的诊断项,就说明代码存在编译错误。你的代码没有自定义外部依赖,所以仅需引入基础运行时程序集即可,无需添加其他引用。
补充说明
- 如果需要校验的是不包含完整类、命名空间定义的代码片段,可以在调用
ParseText时通过CSharpParseOptions将SourceCodeKind设置为Script,即可支持脚本式代码片段的校验。 - 引入基础程序集时无需额外查找文件,可直接通过当前运行时的内置类型获取路径,例如通过
typeof(object).Assembly.Location获取核心运行时程序集的路径。 - 替代方案也可以选择将代码字符串写入临时.cs文件,调用官方
csc命令行编译器执行编译后读取错误输出,但该方案性能更差、集成复杂度更高,优先推荐使用Roslyn API。
内容的提问来源于stack exchange,提问作者F Chopin
相关产品推荐
相关产品推荐

