使用C#验证C#语法

时间:2011-08-09 15:04:37

标签: c# .net validation

我正在搜索一个函数(也许在.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,因此我无法编译它,我只想检查语法。

3 个答案:

答案 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