[英]Checking C# Syntax from the Command Line
有人知道Microsoft .NET框架中一种检查给定C#文件的语法(仅语法)的方法吗?
对于一些背景知识,我感兴趣的是设置syntastic以检查.cs
文件的语法。 syntastic开箱即用,使用Mono C#编译器及其--parse
标志来执行此操作,但是我在Microsoft .NET框架中找不到等效的编译器。
我首先尝试mcs --parse
,是使用csc /target:library /nologo
代替了mcs --parse
,但是问题是,这是基于每个文件调用的。 结果,它报告缺少的命名空间(存在于整个项目构建中),而不仅仅是语法错误。
您可以通过Roslyn CTP执行此操作。 它使您可以完全解析.cs文件,并遍历整棵树,查找错误。
我用NRefactory从icsharpcode IDE之前。 基本内容快速简便。
请参阅本文: 使用NRefactory分析C#代码
我用它来从C#示例创建VB.NET示例。 做到这一点的方法确实很简单,可以轻松地适应您的需求:
private static void ConvertLanguage(TextReader input, TextWriter output, SupportedLanguage language, Action<string> onError)
{
using (IParser parser = ParserFactory.CreateParser(language, input))
{
parser.Parse();
var specials = parser.Lexer.SpecialTracker.RetrieveSpecials();
var result = parser.CompilationUnit;
//if (parser.Errors.Count > 0)
// MessageBox.Show(parser.Errors.ErrorOutput, "Parse errors");
IOutputAstVisitor outputVisitor;
if (language == SupportedLanguage.CSharp)
outputVisitor = new VBNetOutputVisitor();
else
outputVisitor = new CSharpOutputVisitor();
outputVisitor.Options.IndentationChar = ' ';
outputVisitor.Options.IndentSize = 4;
outputVisitor.Options.TabSize = 4;
using (SpecialNodesInserter.Install(specials, outputVisitor))
result.AcceptVisitor(outputVisitor, null);
if (outputVisitor.Errors.Count > 0 && onError != null)
onError(outputVisitor.Errors.ErrorOutput);
output.Write(outputVisitor.Text);
}
}
注意:前面的代码来自旧版本,因此可能无法针对NRefactory库的最新版本进行编译。
我想我可以解决您的问题。 如果尝试不使用调试器就检查代码的语法,则可以使用在线编译器suck作为compilr 。 如果您希望输出结果,则可以使用名为Html Agility的惊人api轻松地从在线编译器中获取结果。 希望这对您有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.