我正在搜索一个函数(也许在.Net-Framework中有一个),我可以使用它来验证C#-syntax。它也可以是带有内置验证的c#解析器。
背景:我正在构建一个小代码生成器,用户可以在其中输入一些定义并获取完整实现的属性等,但我想检查用户是否输入了正确的C#以及结果是否正确。
修改
我不想编译代码,它可能是不完整的代码。因此,例如,用户可以输入代码片段,其中包含代码中的类,我不知道,我只想验证语法,而不是'内容'
实施例
输入:
Car car = new Car();
car.drive("50");
输出:
Same as input, because it's valid and nothing to do.
输入:
Car car = new Car()
car.drive("50");
输出:
Message that it is not valid, beause of missing ';'
等
我不知道类Car
,因此我无法编译它,我只想检查语法。
答案 0 :(得分:4)
如何使用C#编译器以编程方式编译代码:
http://support.microsoft.com/kb/304655
..它作为编译过程的一部分进行验证。你可以得到这样的错误列表(来自文章......因为它有点混乱所以令人惊讶):
foreach(CompilerError CompErr in results.Errors)
{
textBox2.Text = textBox2.Text +
"Line number " + CompErr.Line +
", Error Number: " + CompErr.ErrorNumber +
", '" + CompErr.ErrorText + ";" +
Environment.NewLine + Environment.NewLine;
}
答案 1 :(得分:2)
看看这个.Net类,http://msdn.microsoft.com/en-us/library/system.codedom.compiler.codedomprovider.aspx
基本上,您可以在您查看的代码上调用编译器,并接收生成的任何错误消息。
编辑:如果代码可能无法正常编译,您可以查看返回的错误消息,并忽略“未定义”错误等内容。
你只是其他选择我认为编写一个与C#语言规范匹配的RegEx。
答案 2 :(得分:1)
你必须修改一些可编译的C#代码(使用CodeDom或只是添加用户手动编码的手动代码段),然后编译它,如下所述:How to programmatically compile code using C# compiler