2017-03-16 21 views
11

में एक दृश्य के अंदर सी # 7 सुविधाओं का उपयोग करके मैंने इससे संबंधित अन्य प्रश्नों की तलाश की है, लेकिन कोई भी ऐसा नहीं लगता है जिसे मैं ढूंढ रहा हूं।एएसपी.नेट एमवीसी कोर प्रोजेक्ट

मेरे पास VS2017 में नई परियोजना संरचना के साथ एएसपी.NET कोर पर चल रही एक वेबसाइट है। सी # 7 सुविधाओं का उपयोग कर कोड फाइलें ठीक संकलित करें। लेकिन सिंटैक्स के बारे में त्रुटियों की एक श्रृंखला में दृश्य परिणामों में उन सुविधाओं का उपयोग करने का प्रयास करना। मैंने Roslyn को स्थापित करने का प्रयास करने के लिए इसे उपयोग करने के लिए उपयोग करने के लिए प्रयास किया, क्योंकि मैं सी # 7 सुविधाओं को बता सकता हूं कि रोस्लिन न्यूज पैकेज 2.x और उच्चतर में उपलब्ध हैं। लेकिन अब मुझे फीडबैक मिल रहा है जो स्पष्ट रूप से

त्रुटि CS8059: फ़ीचर 'आउट वेरिएबल घोषणा' सी # 6 में उपलब्ध नहीं है। कृपया भाषा संस्करण 7 या इससे अधिक का उपयोग करें।

अतीत में मैं web.config जाँच चाहते हैं, लेकिन वहाँ एक ASP.NET कोर परियोजना अनुरोध आईआईएस से निपटने के लिए जड़ में लगभग खाली एक के अलावा अन्य में कोई web.config है।

मैं कैसे इंगित करूं कि मेरे विचार Roslyn के साथ संकलित किए जाने चाहिए क्योंकि यह रनटाइम तक नहीं किया जाता है? कम से कम मुझे लगता है कि इस बिंदु पर मेरी समस्या ठीक हो जाएगी।

संपादित करें: यह प्रश्न इस पर एक डुप्लिकेट नहीं है, जैसा कि मैंने शुरुआत में उल्लेख किया है, मैंने मौजूदा प्रश्नों की भी तलाश की है। यह विशेष रूप से संकलन समय पर आपके ऐप में सी # 7 सुविधाओं को सक्षम करता है, और केवल एएसपी.NET अनुप्रयोग के लिए। मैं एएसपी.नेट कोर का उपयोग कर रहा हूं, जिसमें वेबकॉन्फिग नहीं है जिसमें परिभाषित किसी भी संकलन सेटिंग्स के साथ है। साथ ही, मैं इसे दृश्यों के लिए करने की कोशिश कर रहा हूं जो रनटाइम पर संकलित हैं और एक अलग सिस्टम पर हो सकते हैं।

समाधान:

किसी को दिलचस्पी के लिए, आप अपने प्रोजेक्ट (जो मैं जानता था) को रोसलिन जोड़ने के लिए है, लेकिन आप भी RazorViewEngineOptions कॉन्फ़िगर करने के लिए कि भाषा संस्करण का संकेत का उपयोग करना (डिफ़ॉल्ट 6)। मैंने यह किया था लेकिन मैंने इसे सही तरीके से नहीं किया। मुझे WithLanguageVersion()ParseOptions के पीछे की ओर उन्हें बदलने के लिए परिणाम देने की आवश्यकता थी।

services.AddMvc().AddRazorOptions(options => options.ParseOptions = options.ParseOptions.WithLanguageVersion(LanguageVersion.CSharp7)); 
+1

[एक asp.net अनुप्रयोग में # 7 सी को सक्षम करने से] के संभावित डुप्लिकेट (http://stackoverflow.com/ प्रश्न/42744689/सक्षम-सी-तेज -7-इन-ए-एएसपी-नेट-एप्लिकेशन) – uTeisT

+0

डुप्लिकेट नहीं, अतिरिक्त विवरण क्यों। –

+0

आपके द्वारा प्राप्त त्रुटि संदेश इंगित करता है कि संकलक ठीक से अपग्रेड किया गया था (नया वाक्यविन्यास पहचाना गया था)। वहां कहीं/लंगवर्जन सेटिंग होनी चाहिए जो एएसपी.Net कोर में इसे नियंत्रित करे, लेकिन मुझे नहीं पता कि यह कहां है। माफ़ कीजिये। –

उत्तर

14

आप (ASP.NET कोर टीम पर लोगों द्वारा अनुशंसित) निम्न प्रयास किया जा सका:

  1. Microsoft.CodeAnalysis.CSharp (संस्करण 2.0.0) और System.ValueTuple स्थापित करें (संस्करण 4.3.0) पैकेज
  2. स्टार्टअप में।सीएस, ConfigureServices विधि में, कॉन्फ़िगर उस्तरा करके सी # 7 उपयोग करने के लिए निम्नलिखित:

    services.AddMvc().AddRazorOptions(options => 
        options.ParseOptions = new CSharpParseOptions(LanguageVersion.CSharp7)); 
    
+0

मेरे पास पहले से ही यह सब कुछ था, लेकिन मैंने यह सुनिश्चित करने के लिए दोबारा जांच करने के लिए फिर कोशिश की, और आपका काम किया। विसंगतियों की तलाश करने के बाद, मैंने पाया कि 'पारसेप्शन' के लिए आपका असाइनमेंट काम करता है लेकिन 'ParseOptions.SLanguageVersion()' पर मेरा कॉल नहीं था। तो मैं कार्यान्वयन की तलाश में गया (मुझे प्यार है कि यह सब खुला स्रोत है)। 'WithLanguageVersion()' आपके मौजूदा 'ParseOptions' को बिल्कुल संशोधित नहीं करता है, लेकिन इसके बजाय एक नया 'CSharpParseOptions' देता है। तो एक बार जब मैंने इसे 'ParseOptions' संपत्ति पर वापस सौंपा, तो यह ठीक काम करता है। थोड़ा काउंटर अंतर्ज्ञानी, लेकिन यह काम करता है। :-) –

+0

धन्यवाद मदद के लिए एक गुच्छा !! :-) –

+0

क्या यह नामित tuples के लिए भी काम करेगा? मैं इस धारणा के तहत हूं, निश्चित रूप से मेरे द्वारा चलाए गए परीक्षणों से ऐसा नहीं लगता है क्योंकि यह 'रनटाइमबिन्डर अपवाद' फेंकता है। –

1

तो मुझे पता चला कि वहाँ कुछ संकलन विकल्प सामने आ रहा है कि आप कॉल ConfigureServices() कॉल में कहते हैं कि।

public void ConfigureServices(IServiceCollection services) 
{ 
    // Add framework services. 
    services.AddMvc().AddRazorOptions(x => x.ParseOptions.WithLanguageVersion(LanguageVersion.CSharp7)); 
} 

समस्या LanguageVersion.CSharp7 त्रुटि देता है, तो आप रोसलिन जोड़ने नहीं है। तो मुझे लगता है कि यह जरूरी है।

रोज़लिन जोड़ने के बाद, सब कुछ ठीक संकलित करता है, लेकिन दृश्य अभी भी एक त्रुटि देता है।

@{ 
    //My view code 
    string s = "1"; 
    int.TryParse(s, out int i); 
} 

तो अगर MVC एक RazorOptions है कि आप भाषा संस्करण निर्दिष्ट करने के लिए उपयोग कर सकते को उजागर करता है, यह क्यों सम्मानित नहीं है?

+0

आप ' services.AddMvc() AddRazorOptions (x => x.ParseOptions = x.ParseOptions.WithLanguageVersion (LanguageVersion.CSharp7)) का उपयोग करने की जरूरत है – Suchiman

संबंधित मुद्दे