8

Microsoft .NET フレームワークで、特定の C# ファイルの構文のみをチェックする方法を知っている人はいますか?

ちょっとした背景として、私が興味を持っているのは、 syntasticをセットアップしてファイルの構文をチェックすること.csです。すぐに使用できる syntastic は、--parseフラグ付きの Mono C# コンパイラを使用してこの操作を実行しますが、Microsoft .NET フレームワークで同等のものを見つけることができません。

これを機能させるための最初の試みはcsc /target:library /nologo、の代わりに使用することでしmcs --parseたが、問題は、これがファイルごとに呼び出されることです。その結果、構文エラーだけでなく、欠落している名前空間 (完全なプロジェクト ビルドに存在する) が報告されます。

4

3 に答える 3

2

Roslyn CTPを介してこれを行うことができます。.cs ファイル全体を解析し、ツリー全体を調べてエラーを探すことができます。

詳細については、「ウォークスルー: C# の構文解析の概要」をダウンロードすることをお勧めします。これは、C# ファイルの構文ツリーを調べるための基本的なアプローチを示しているためです。

于 2012-12-10T22:45:05.510 に答える
1

以前、icsharpcodeIDEからNRefactoryを使用しました。基本的なものはすばやく簡単にできます。

この記事を参照してください: C#コードを分析するためのNRefactoryの使用

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ライブラリに対してコンパイルされない場合があります。

于 2012-12-11T00:22:18.373 に答える
0

私はあなたの質問に対する解決策を持っているかもしれないと思います. デバッガーを使用せずにコードの構文をチェックしようとしている場合は、オンライン コンパイラ suck as compilrを使用できます。結果を出力したい場合は、Html Agilityと呼ばれるこの素晴らしい API を使用して、オンライン コンパイラから簡単に結果を取得できます。これが役に立ったことを願っています!

于 2012-12-10T22:45:00.990 に答える