दृश्य स्टूडियो 2015 के साथ C # 6.0 सुविधाएँ काम नहीं कर रही हैं


135

मैं C # 6.0 के साथ विजुअल स्टूडियो 2015 का परीक्षण कर रहा हूं लेकिन भाषा की विशेषताएं काम नहीं कर रही हैं। MVC वेब अनुप्रयोग में, निम्न कोड संकलित करता है:

if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName))
{
    // More logic here...
}

हालाँकि, जब मैं डिबग और IIS एक्सप्रेस के माध्यम से आवेदन चलाता हूं, तो मुझे निम्नलिखित त्रुटि मिलती है:

CS1525: अमान्य अभिव्यक्ति शब्द '।'

मैं इन सुविधाओं को कैसे सक्षम करूं?


1
ऐसा लगता है कि यह MVC- विशिष्ट (या कम से कम ASP.NET- विशिष्ट) है, इसलिए मैंने एक टैग जोड़ा है - क्योंकि Visual Studio खुद ही C # 6 के बारे में स्पष्ट रूप से जानता है ... आपको संस्करण के संदर्भ में जहाँ भी आप MVC कॉन्फ़िगर करते हैं, उसे देखना चाहिए .NET का यह लक्ष्य है ... यह संभव है कि वहाँ कुछ है जो आपको संकलक का उपयोग करने के लिए निर्दिष्ट करेगा।
जॉन स्कीट

हो सकता है कि आपको web.config में compilerroslyn codeprovider msdn.microsoft.com/en-us/library/y9x69bzw(v=vs.110).aspx के लिए एक तत्व जोड़ने की आवश्यकता हो ?
रेने

क्या यह कोड एक aspx पेज या रेजर पेज में है? या कोड जो एक .cs फ़ाइल में है?
एरिक फनकेनबसच

@ErikFunkenbusch यह एक रेजर पेज में है।
क्रिस शिफहैर

1
हाँ, MVC5 रोज़लिन संगत नहीं है
एरिक फ़ेकेनबसच

जवाबों:


209

यह एमवीसी 5 (5.2.3 परीक्षण किया गया) में काम करता है, आपको बस रोजलिन कोड डोम नुगेट पैकेज को जोड़ने की आवश्यकता है

.NET कंपाइलर के लिए कोडडोम प्रदाता ...

रिप्लेसमेंट कोडडॉम प्रदाता जो नए .NET कम्पाइलर प्लेटफॉर्म ("रोसलिन") कंपाइलर का उपयोग सेवा एपीआई के रूप में करते हैं। यह कोडडॉम (उदाहरण के लिए ASP.NET रनटाइम संकलन) का उपयोग करने के साथ-साथ इन प्रणालियों के संकलन प्रदर्शन में सुधार करने के लिए नई भाषा सुविधाओं के लिए समर्थन प्रदान करता है।

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/


4
इसे एक उत्तर के रूप में प्रस्तुत किया जाना चाहिए, क्योंकि यह एमवीसी के बीटा संस्करण में अपग्रेड होने के बजाय समस्या को ठीक करता है।
डैनियल यूजेन

3
@ आप गलत हैं। Microsoft.Net.Compilers MSBuild से संबंधित है। CodeDOM प्रदाता ASP.NET से संबंधित है और अन्य API रनटाइम पर कि संकलन है।
jbtule

1
हां आप ठीक हैं। मैंने गलत / गलत व्याख्या की, क्योंकि वे कभी-कभी नए नामों के साथ पैकेज को दोहराते हैं और उन्हें केवल निर्भरता के रूप में जोड़ते हैं।
डेविड डी स्लोओवर

21
यह Visual Studio को पुनरारंभ करने के लिए उल्लेख के लायक हो सकता है। मैं पैकेज स्थापित करने के बाद इसकी शिकायत करता रहा, लेकिन फिर से शुरू होने से यह दूर हो गया :)
Servers

1
@ रोनो, सुनिश्चित करें कि आपका पैकेज स्रोत है nuget.org। जैसा कि आप लिंक से देख सकते हैं, यह सही नाम है, और पैकेज मौजूद है।
jbtule

17

खैर, मेरे पास MVC5 है और हाल ही में VS 2015 स्थापित किया गया है।

मैंने कोडडॉम प्रदाता पैकेज स्थापित किया है, लेकिन यह मदद नहीं की ... लेकिन उसके बाद मुझे एहसास हुआ, कि पैकेज फ्रेमवर्क 4.5 का समर्थन करता है, जबकि मेरे पास लक्ष्य फ्रेमवर्क है जो परीक्षणों के दौरान 4.6 पर सेट है - यह 4.5 के साथ काम करता है ...

इसलिए फ्रेमवर्क को लक्षित करने पर भी ध्यान दें। यदि आपके पास 4.5 है - तो बस पैकेज स्थापित करें Microsoft.CodeDom.Providers.DotNetCompilerPlatform। लेकिन अगर आपके पास लक्ष्य के रूप में 4.5.1-4.6 है, तो आपको web.config सेक्शन में बदलना होगा

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
          <providerOption name="CompilerVersion" value="v4.0"/>
      </compiler>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

के लिए सी # , बस परिवर्तन प्रकार हैं:

type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 

इससे मुझे निश्चित रूप C# 6से काम करने में मदद मिली ASP.NET 4.6, लेकिन हो सकता है कि कोड को typeपहले से ही सही के साथ पोस्ट करना बेहतर रहा हो ...
सर्ज सगन

धन्यवाद, यह तब काम कर रहा था जब मैं मंगलवार को घर गया था और तब काम नहीं किया था जब मैं गुरुवार को वापस आया था। किसी तरह, इस खंड का विन्यास AWOL हो गया था, क्योंकि मुझे याद है कि जब मैं इसे मूल रूप से काम करने के लिए प्राप्त कर रहा था, तो इसे देखकर मुझे याद आया!
कार्ल

16

मुझे विजुअल स्टूडियो 2015 में भी यही समस्या थी। यहां एक और जवाब मैंने अपने द्वारा हल किए गए समाधान के लिए दिया, लेकिन उन्होंने गलत तरीके से फिक्स निर्दिष्ट किया और कभी भी स्पष्टीकरण नहीं दिया।

Visual Studio मेनू पर, प्रोजेक्ट का चयन करें और यदि आपको यह समस्या आ रही है तो आपको उप-आइटम सक्षम C # 6 / VB 14 देखना चाहिए । यह मेनू सब-आइटम चुनें। यह Nuget से सही पैकेज डाउनलोड करेगा और उन्हें इंस्टॉल करेगा। इसके बाद, Visual Studio को पुनरारंभ करें और अपने समाधान को पुनः लोड करें।

मैं सत्यापित नहीं कर सकता कि क्या यह प्रोजेक्ट गुण> बिल्ड> उन्नत> भाषा संस्करण चयन को C # 6 तक ठीक कर देगा , इसलिए आप मेनू से C # 6 को सक्षम करने के बाद भी इसे जांचना चाहते हैं।


2
यह उप-आइटम मेरे प्रोजेक्ट मेनू में नहीं है। मेरे पास यूनिटी 5.5.2 है जिसने कुछ स्क्रिप्ट बनाने के लिए मेरे वीएस 2015 समुदाय को खोल दिया है। एक संपत्ति में डिफ़ॉल्ट को जोड़ने पर एक संकलक त्रुटि लाल रेखा से दिखाई देती है, यह बताते हुए कि मुझे C # 6 की आवश्यकता है क्योंकि C # v.4 वर्तमान में लोड है। किसी भी समय मैं इस परियोजना के गुणों का चयन करने की कोशिश करता हूं, स्क्रीन सिर्फ चमकती है लेकिन कोई पृष्ठ नहीं आता है।
एडवर्ड

15

अपने प्रोजेक्ट गुणों की जांच करें, निर्माण पर जाएं, उन्नत करें और देखें कि क्या सी # 6.0 है यदि आपके पास यह डिफ़ॉल्ट नहीं है।

वर्तमान में MVC5 और C # 6.0 के लिए एकदम सही समर्थन है और आश्चर्यजनक रूप से अच्छी तरह से काम करता है!


18
"फ़ीचर 'अशक्त प्रचारक' C # 5 में उपलब्ध नहीं है। कृपया भाषा संस्करण 6 या अधिक का उपयोग करें।" उन्नत सेटिंग के बारे में नहीं पता था, लेकिन यहाँ काम नहीं करता है।
जूफो

3
आप डिफ़ॉल्ट संस्करण को 6 में कैसे बदलते हैं ताकि मुझे इसे प्रत्येक प्रोजेक्ट पर सेट न करना पड़े?
मीर

3
"कुछ" को परिभाषित करें। यह बनाम 2015 के अपडेट 3 में काम नहीं करता है
रॉबर्ट इवानक

1
जब मुझे प्रोजेक्ट प्रॉपर्टी मिली, तो मुझे बिल्ड मेन्यू नहीं मिला। यदि मैं "प्रॉपर्टी पेज" पर जाता हूं तो मुझे एक बिल्ड मेनू मिलता है, लेकिन मेरे पास बिल्ड स्क्रीन पर "उन्नत" बटन नहीं है। अनुवाद, "यह काम नहीं करता है" (मेरे लिए)
मैल्कम एंडरसन

मेरा वीएस संस्करण कम्युनिटी 2015 अपडेट 3 (14.0.25431.01)
मैल्कम एंडरसन

10

नवीनतम स्थापित करने की सलाह का पालन करना भी शामिल है, जो Microsoft.CodeDom.Providers.DotNetCompilerPlatformमुझे दूर जाने के लिए सभी त्रुटियों को प्राप्त करने के लिए अपना मूल सेट करने के लिए था :Web.config system.codedomVisual Studio 2015

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

अब पुनः आरंभ करें Visual Studioऔर इसे करना चाहिए।


6

विज़ुअल स्टूडियो 2015 Enable C#6 / VB 14प्रोजेक्ट मेनू में ASP.NET वेब साइट / वेब एप्लिकेशन के साथ भी दिखाई देगा ।

यह वास्तव में आपके प्रोजेक्ट में स्थापित Microsoft.CodeDom.Providers.DotNetCompilerPlatformऔर Microsoft.Net.Compilersपैकेज करेगा और web.config फ़ाइल में उपयुक्त टैग जोड़ेगा।

दृश्य स्टूडियो 2015 - cs6 स्निप को सक्षम करें


1
क्या वेबसाइट टैब? यदि आप गुण / वेब का मतलब वहाँ कोई ऐसी सुविधा नहीं है।
रॉबर्ट इवान

1
I विज़ुअल स्टूडियो, जब आप कुछ वेबसाइट प्रोजेक्ट चुनते हैं, तो वेबसाइट टैब दृश्य टैब के बगल में दिखाई देता है। वहां आपको यह सुविधा मिल सकती है।
मिशाल Micuvada

1
मैंने अभी के लिए अस्वीकृत कर दिया है, कृपया स्पष्ट करने के लिए संपादित करें कि आप वास्तव में क्या मतलब है, उदाहरण के लिए स्क्रीनशॉट जोड़कर।
user247702

मैं एक वेबसाइट के साथ समस्या को ठीक करने की कोशिश कर रहा हूं, और वह मेनू आइटम मेरे लिए उपलब्ध नहीं है। ध्यान दें कि एक ही समाधान में अन्य गैर-वेब परियोजनाओं को VB 14 सुविधाओं का उपयोग करने में कोई समस्या नहीं है। वे सभी .NET 4.7 को लक्ष्य करते हैं, और मैंने कोडडोम कंपाइलर स्थापित किया है।
एंड्रयू एस

-1
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:15 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.