2012-12-10 5 views
8

Microsoft .NET Frameworkで構文をチェックする方法と、特定のC#ファイルの構文のみを知っている人はいますか?コマンドラインからのC#構文の確認

ちょっとした背景として、私がやりたいことは、syntasticを設定して.csファイルの構文をチェックすることです。デフォルトではSyntheticはこの操作を実行するために--parseフラグを持つMono C#コンパイラを使用しますが、Microsoft .NETフレームワークでは同等のものは見つかりません。

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

+0

これを行う理由は何ですか? – mellamokb

+4

モノをインストールしてみませんか? –

答えて

1

これまでicsharpcode IDEからNRefactoryを使用しました。基本的なものはすばやく簡単です。私はC#の例からVB.NETの例を作成するためにそれを使用 Using NRefactory for analyzing C# code

は、こちらの記事を参照してください。これを行う方法は本当にストレートフォワードであり、容易にあなたのニーズに適合させることができる。

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ライブラリの最新バージョンに対してコンパイルされないことがあり。

+0

これは、最高のCLR実装に依存しない答えです。 – Michael

0

私はあなたの質問に対する解決策があるかもしれないと思います。デバッガを使わずにコードの構文をチェックしようとしている場合は、compilrというオンラインコンパイラを使うことができます。 リサイズを出力したい場合は、Html Agilityと呼ばれるこの素晴らしいAPIを使用して、オンラインコンパイラの結果を容易に取得できます。これが助けて欲しい!

2

これはRoslyn CTPで行うことができます。それはあなたが完全に.csファイルを解析し、エラーを探して、フルツリーを歩くことができます。

詳細については、C#ファイルの構文ツリーを調べる基本的な方法を示すので、C#用にWalkthrough: Getting Started with Syntax Analysisをダウンロードすることをお勧めします。

関連する問題