2012-12-10 18 views
8

Czy ktoś wie o sposobie w strukturze Microsoft .NET, aby sprawdzić składnię i tylko składnię danego pliku C#?Sprawdzanie składni języka C# z wiersza poleceń

Dla małego tła, co mnie interesuje, należy skonfigurować syntastic, aby sprawdzić składnię plików .cs. Po wyjęciu z pudełka, syntastic używa kompilatora Mono C# z flagą --parse, aby wykonać tę operację, ale nie mogę znaleźć żadnego odpowiednika w strukturze Microsoft .NET.

Pierwszą próbą uruchomienia tej funkcji było użycie csc /target:library /nologo zamiast mcs --parse, ale problem polega na tym, że wywoływana jest ona dla poszczególnych plików. W rezultacie raportuje brakujące przestrzenie nazw (istniejące w pełnej wersji projektu) zamiast tylko błędów składniowych.

+0

Jaki jest tego powód? – mellamokb

+4

Dlaczego po prostu nie instalować mono? –

Odpowiedz

1

Użyłem wcześniej NRefactory z IDE arcus ostrołuków. Jest to szybkie i łatwe w przypadku podstawowych rzeczy.

zobaczyć ten artykuł: Using NRefactory for analyzing C# code

Używam go do tworzenia przykłady VB.NET C# przykłady. Sposób, że robi to bardzo prosta i można je łatwo dostosować do własnych potrzeb:

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); 
     } 
    } 

Uwaga: Powyższy kod jest ze starszej wersji i nie może skompilować przeciwko najnowszej wersji biblioteki NRefactory .

+0

To wydaje się być najlepszą odpowiedzią niezależną od wdrożenia CLR. – Michael

0

Myślę, że mogę mieć rozwiązanie twojego pytania. Jeśli próbujesz sprawdzić składnię swojego kodu bez bycia w debugerze, możesz użyć kompilatora online, który zasysa jako compilr. Jeśli chcesz wyprowadzić wersje, możesz użyć tego niesamowitego api o nazwie Html Agility, aby z łatwością pobrać wyniki z kompilatora online. Mam nadzieję, że to pomogło!

2

Możesz to zrobić poprzez Roslyn CTP. Pozwala całkowicie przeanalizować plik .cs i przejść przez pełne drzewo, szukając błędów.

Aby uzyskać szczegółowe informacje, zalecamy pobranie Walkthrough: Getting Started with Syntax Analysis dla języka C#, ponieważ pokazuje podstawowe podejście do przeglądania drzew składni w pliku C#.

Powiązane problemy