Проверка синтаксиса C# из командной строки

кто-нибудь знает способ в Microsoft .NET framework проверить синтаксис и только синтаксис данного файла c#?

для небольшого фона, то, что я заинтересован в создании syntastic чтобы проверить синтаксис .cs файлы. Из коробки syntastic использует компилятор Mono C# с его --parse флаг для выполнения этой операции, но я не могу найти эквивалента в Microsoft .NET framework.

моя первая попытка сделать это работа должна была использовать csc /target:library /nologo на месте mcs --parse, но проблема в том, что это вызывается на основе каждого файла. В результате он сообщает о отсутствующих пространствах имен (которые существуют в полной сборке проекта) вместо только синтаксических ошибок.

3 ответов


я использовал NRefactory раньше из IDE icsharpcode. Это быстро и легко для основных вещей.

посмотреть в этой статье: использование NRefactory для анализа кода C#

Я использую его для создания VB.NET примеры из примеров C#. Метод, который делает это действительно прямо вперед и легко адаптируется к вашим потребностям:

    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.


вы можете сделать это с помощью Roslyn CTP. Это позволяет анализировать .cs файл полностью, и ходить по всему дереву, ища ошибки.

для деталей, я рекомендую загрузить пошаговое руководство: начало работы с синтаксическим анализом для C#, поскольку он показывает вам основной подход к просмотру синтаксических деревьев в файле c#.


Я думаю, что у меня есть решение вашего вопроса. Если вы пытаетесь проверить синтаксис кода, не находясь в отладчике, вы можете использовать онлайн-компилятор suck as compilr. Если вы хотите вывести resuts, то вы можете использовать этот удивительный api под названием HTML-Код Аджилити, чтобы легко получить результаты от онлайн-компилятора. Надеюсь, это помогло!