2012-12-10 16 views
8

से सी # सिंटेक्स की जांच कर रहा है क्या किसी को दिए गए सी # फ़ाइल के सिंटैक्स की जांच करने के लिए माइक्रोसॉफ्ट .NET ढांचे में और किसी सिंटैक्स की आवश्यकता है?कमांड लाइन

थोड़ी सी पृष्ठभूमि के लिए, मुझे की स्थापना .cs फ़ाइलों के सिंटैक्स की जांच करने में क्या दिलचस्पी है। बॉक्स के बाहर, सिंथैस्टिक इस ऑपरेशन को करने के लिए --parse ध्वज के साथ मोनो सी # कंपाइलर का उपयोग करता है लेकिन मुझे माइक्रोसॉफ्ट .NET ढांचे में कोई समकक्ष नहीं मिल सकता है।

mcs --parse के स्थान पर csc /target:library /nologo का उपयोग करने के लिए मेरा पहला प्रयास था, लेकिन समस्या यह है कि इसे प्रति-फ़ाइल आधार पर कहा जाता है। नतीजतन, यह सिंटैक्टिक त्रुटियों के बजाय अनुपलब्ध नेमस्पेस (जो पूर्ण प्रोजेक्ट बिल्ड में मौजूद है) की रिपोर्ट करता है।

+0

ऐसा करने का कारण क्या है? – mellamokb

+4

क्यों मोनो इंस्टॉल नहीं करें? –

उत्तर

1

मैंने icsharpcode आईडीई से पहले NRefactory का उपयोग किया है। यह बुनियादी सामग्री के लिए त्वरित और आसान है। मैं सी # उदाहरण से 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

यह सबसे अच्छा सीएलआर कार्यान्वयन-स्वतंत्र उत्तर है। – Michael

0

मुझे लगता है कि मुझे आपके प्रश्न का समाधान हो सकता है। यदि आप डीबगर में बिना कोड के सिंटैक्स को जांचने की कोशिश कर रहे हैं तो आप compilr के रूप में एक ऑनलाइन कंपाइलर चूसने का उपयोग कर सकते हैं। यदि आप रीसेट को आउटपुट करना चाहते हैं तो आप आसानी से ऑनलाइन कंपाइलर के परिणामों को पकड़ने के लिए Html Agility नामक इस अद्भुत एपीआई का उपयोग कर सकते हैं। उम्मीद है कि यह मदद की!

2

आप इसे Roslyn CTP के माध्यम से कर सकते हैं। यह आपको पूरी तरह से .cs फ़ाइल को पार्स करने की अनुमति देता है, और त्रुटियों की तलाश में पूरे पेड़ पर चलता है।

विवरण के लिए, मैं सी # फ़ाइल के लिए Walkthrough: Getting Started with Syntax Analysis डाउनलोड करने की सलाह देता हूं, क्योंकि यह आपको सी # फ़ाइल में सिंटैक्स पेड़ों को देखने का मूल दृष्टिकोण दिखाता है।