繁体   English   中英

从命令行检查C#语法

[英]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文件,并遍历整棵树,查找错误。

有关详细信息,我建议下载演练: C# 语法分析入门 ,因为它向您展示了查看C#文件中语法树的基本方法。

我用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM