वेब साइट परियोजना प्रकार के साथ C # 6 का उपयोग कैसे करें?


126

किसी मौजूदा वेब साइट प्रोजेक्ट प्रकार विजुअल स्टूडियो 2015 को अपडेट किया , मैंने फ्रेमवर्क को 4.6 में बदल दिया।

फिर मुझे फ़ाइलों के पीछे अपने कोड में उन सभी नई सुविधाओं के उपलब्ध होने की उम्मीद थी।

दुर्भाग्य से मुझे त्रुटियाँ मिल रही हैं:

CS8026 त्रुटि: फ़ीचर 'अभिव्यक्ति-शारीरिक संपत्ति' C # 5 में उपलब्ध नहीं है। कृपया भाषा संस्करण 6 या अधिक का उपयोग करें।

ऑरेग:

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

मैंने एक त्वरित Google जांच की और एक व्यक्ति को स्कॉटगू (पृष्ठ पर "8026" के लिए खोज) की एक ब्लॉग पोस्टिंग में कुछ टिप्पणियां पोस्ट करते हुए पाया ।

चूंकि मुझे उसका समाधान समझ में नहीं आ रहा है, इसलिए मैं चाहता हूं कि समाधान अधिक दिखाई दे, मैंने यह एसओ पोस्ट बनाया है।

मेरा प्रश्न:

C # 6 सुविधाओं को पहचानने के लिए मेरे पास टाइप वेब साइट (अर्थात वेब एप्लिकेशन नहीं ) का विज़ुअल स्टूडियो 2015 प्रोजेक्ट कैसे हो सकता है?


1
क्या आपने टिप्पणी में उल्लिखित thw config तत्वों को जोड़ने की कोशिश की है?
scheien

मैं ऐसा करने जा रहा हूं, लेकिन यह वास्तव में मुझे अजीब लग रहा है , इसलिए मैं कुछ और स्वच्छ समाधान की उम्मीद कर रहा था।
Uwe Keim

5
बेशक, दूसरा विकल्प उन वेब साइट "प्रोजेक्ट्स" का उपयोग बंद करना है, और इसके बजाय वेब एप्लिकेशन प्रोजेक्ट्स का उपयोग करना है।
जॉन सॉन्डर्स

1
@ जॉनसन मुझे ऐसा करना अच्छा लगेगा । चूंकि माइग्रेशन एक मैन्युअल कार्य है, इसलिए मुझे डर है कि माइग्रेशन के दौरान मेरे द्वारा लागू की जाने वाली सभी त्रुटियां। छोटी परियोजनाओं के लिए कुछ समय किया। हमेशा एक परेशानी थी ...
Uwe Keim

1
खुशी है कि आपने इसे माना है। टिप्पणी ज्यादातर अन्य पाठकों के लिए थी जो सोच सकते हैं कि एक "वेब साइट" परियोजना को लगता है कि वे क्या चाहते हैं।
जॉन सॉन्डर्स

जवाबों:


118

मैंने इसे ASP.NET MVC 5 (परीक्षण 5.2.3) के साथ परीक्षण किया है, और आपका माइलेज अन्य वेब फ्रेमवर्क के साथ भिन्न हो सकता है, लेकिन आपको बस रोजलिन कोडडॉम जोड़ना होगा । NuGet पैकेज

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

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

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

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

NuGet पैकेज में DLL फ़ाइलों को जोड़ना चाहिए और निम्नलिखित को अपने web.config में जोड़ना चाहिए।

  <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>

अगर यह अभी भी गायब है। खुद को जोड़ने की कोशिश करें।


1
यह उम्मीद के मुताबिक काम करता है। C # 6 अब उपलब्ध है। दोष यह है कि मेरे App_GlobalResources / Resources.resx जोरदार-टाइप किए गए संसाधनों तक अब ऑटो-क्लास उत्पन्न नहीं करते हैं।
उवे कीम

1
एक नोट के रूप में, मैं परियोजना के लक्ष्य को 4.6 में बदलने के बाद त्रुटियों के बिना निर्माण करने में सक्षम था। हालाँकि, मुझे इस पैकेज को स्थापित करने की आवश्यकता थी, जो कि इंटेलीजेंस से दिखने वाली लाल स्क्विगलीज़ को हल करने के लिए था।
डग मॉरो

7
मैं एक WebForms WebSite (कोई परियोजना फ़ाइल) में इसका उपयोग कर रहा हूँ। अफसोस की बात है, सरल .aspx परिवर्तन एक ब्राउज़र में पृष्ठ को फिर से अनुरोध करते समय एक दर्दनाक धीमी गति से पुनः ट्रिगर करते हैं। हो सकता है कि Roslyn एक WebApplication (proj फ़ाइल के साथ) के लिए सैद्धांतिक रूप से तेज़ हो, लेकिन WebSites के लिए यह App_Code फ़ोल्डर में csc के माध्यम से काफी धीमा प्रतीत होता है ... कोई भी एक ही चीज़ देख रहा है?
स्टेफन एंगेल

4
ध्यान दें, WebForms के लिए C # 6 के साथ संकलन करने के लिए आपको NuGet पैकेज Microsoft.CodeDom.Providers.DotNetCompilerPlatformऔर उसकी निर्भरता स्थापित करने की आवश्यकता हैMicrosoft.Net.Compilers

3
ध्यान दें कि यदि आपके समाधान में एक से अधिक वेब साइट हैं - चीजें काम नहीं करेंगी, तो पुन: पेश करने का सबसे आसान तरीका खाली समाधान बनाना है और इसमें परियोजनाओं को जोड़ना शुरू करना है, दूसरी वेब साइट के बाद - आपको "csc.exe नहीं मिल सकता है" शुरू होगा त्रुटियों
मैक

67

यह भी देखें इस ब्लॉग पोस्ट से सैयद इब्राहिम हाशिमी कैसे वी.एस. आईडीई के माध्यम से यह करने के लिए पर।

विजुअल स्टूडियो 2015 अपडेट 1 में हमने इसे सरल बनाने के लिए एक नई सुविधा को शामिल किया है। जब आपके पास एक समाधान खुला होता है जिसमें कम से कम एक वेब परियोजना होती है जो .NET 4.5+ को लक्षित कर रही है और आपके पास प्रोजेक्ट मेनू में DotNetCompilerPlatform NuGet पैकेज नहीं है, तो आपको एक नया विकल्प दिखाई देगा, C # 6 / VB 14 को सक्षम करें।
यहाँ छवि विवरण दर्ज करें

अपडेट करें।

वीएस 2017 और 2019 में यह सुविधा बिल्ड -> एएसपी.नेट संकलन में स्थानांतरित हो गई है । यहाँ छवि विवरण दर्ज करें


2
क्या आप जानते हैं कि यह आइटम विजुअल स्टूडियो 2019 में कहां है?
रक्षक एक

4
@ रक्षक-एक बिल्ड -> ASP.NET संकलन
वर्टिगो

1
मैंने VS2019 में एक पुरानी फ़ोल्डर-आधारित वेबसाइट परियोजना खोली और उस विकल्प को दिखाने से पहले फ़ाइल> प्रोजेक्ट को सहेजें।
21

15

मैंने @jbtule के सुझाव के अनुसार DotNetCompilerPlatform स्थापित किया, लेकिन अभी भी वही त्रुटियां हो रही थीं।

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

मैंने समाधान को बंद कर दिया, बिन और ओबीजी फ़ोल्डर्स को हटा दिया, फिर समाधान खोला और पुनर्निर्माण किया। अब C # 6 फीचर्स काम करते हैं।


3
बस समापन और फिर से खोलना वीएस ने मेरे लिए (बाद में Install-Package ...) काम किया । साथ ही 4.6 को निशाना बनाया।
रैल्टर

1
यह मेरे लिए काम कर रहा है, यह भी ध्यान दें कि पुनर्विक्रेता का उपयोग करने से आपको गलत गलतियाँ दिखाई दे सकती हैं, मुझे यह पता लगाने में थोड़ा समय लगा कि मैं "दृश्य में" प्रतीक को हल करने में असमर्थ क्यों हूं ...
निकल्स

1
मेरे मामले में मुझे बस समाधान को फिर से खोलने के बाद लगभग 30 सेकंड तक इंतजार करना पड़ा और इसे हटाने के बिना काम किया binऔर obj
मार्क.2377

12

संभव समाधान, स्कॉटगू के ब्लॉग पोस्टिंग (पृष्ठ पर "8026" की खोज) पर टिप्पणियों से लिया गया है :

समाधान सुझाव 1 (डेविड टेलर)

इन RTM कोड डोम तत्वों को web.config में जोड़ें:

<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>

फिर Roslyn और Microsoft.CodeDom.Providers जोड़ें। * अपने बिन निर्देशिका में सामान भरें।

यह सेटअप करने के लिए पर्याप्त आसान है, लेकिन मेरे लिए बस अजीब था कि अगर आपने वीएस 2015 आरटीएम में एक नया "वेब साइट" बनाते समय .NET 4.6 का चयन किया था, तो इसके लिए डिफ़ॉल्ट टेम्पलेट सेट नहीं किया गया था।

समाधान सुझाव 2 (मार्टिन)

ऊपर डेविड टेलर की टिप्पणी के आगे, यह सिस्टम की तरह दिखता है। जब वेब ऐप टारगेटफ्रॉमवर्क के साथ डिफ़ॉल्ट v4.5.2 के रूप में बनाया जाता है, तो सिस्टम सेटिंग्स स्वतंत्रता सही होती हैं। TargetFramework को v4.6 में बदलना CSharp के लिए संकलक सेटिंग्स को संशोधित करने के लिए प्रकट होता है, एक तरह से जो समस्या का कारण बनता है।

मेरा वर्कआर्डर इस प्रकार था:

  1. फ़ाइल / नया / ASP.NET वेब अनुप्रयोग
  2. ASP.NET 4.5.2 टेम्पलेट्स से "वेब एपीआई" टेम्पलेट का चयन करें
  3. Web.config में system.cod स्वतंत्रता तत्व (और इसकी सामग्री) की एक प्रति लें
  4. गुण / TargetFramework का उपयोग करके, लक्ष्य फ़्रेमवर्क को 4.6 पर सेट करें
  5. TargetFramework को बदलने से पहले ली गई कॉपी के साथ web.config में संशोधित system.cod स्वतंत्रता तत्व को बदलें
  6. मारो F5

होम पेज को उम्मीद के मुताबिक लोड करना चाहिए।

जानकारी के लिए, Target.cramework को v4.6 में बदलने के तुरंत बाद system.cod स्वतंत्रता सामग्री। निम्नानुसार था (प्रकार "Microsoft.CSharp.CSharpCodeProvider" का उपयोग करें):

<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>

3
आपके समाधान 2 के संबंध में, Microsoft.CSharp.CSharpCodeProviderसंस्करण 4.0 का अर्थ है कि यह रोशेलिन का उपयोग नहीं कर रहा है, इस प्रकार सी # 6.0 के लिए काम नहीं करेगा।
jbtule

1
पुराने समाधान से माइग्रेट करते समय, सुनिश्चित करें <LangVersion>कि csprojफ़ाइल के बराबर है 6। अगर यह कुछ और है तो यह समस्या पैदा कर सकता है।
शाऊल

7

यह एक वेब साइट परियोजना के लिए नहीं है । ऐसा आप ASP.NET MVC प्रोजेक्ट के लिए करते हैं।

आप Visual Studio UI में C # 6 को टॉगल कर सकते हैं। यह इतना आसान विकल्प है, यह पहले प्रयास करने के लायक है।

  1. अपनी परियोजना पर राइट क्लिक करें और गुण चुनें ।
  2. बिल्ड टैब पर क्लिक करें ।
  3. बिल्ड टैब में बहुत नीचे एक उन्नत ... बटन है।
  4. यह उन्नत बिल्ड सेटिंग्स खोलता है जैसा कि नीचे दिखाया गया है। C # 6.0 का चयन करें।

यहाँ छवि विवरण दर्ज करें


@ प्रबंधक आप सही हो सकते हैं। यह ASP.NET MVC प्रोजेक्ट के लिए था।
जेस

@ क्या गलत है? क्या यह एमवीसी परियोजना है? क्या आपके पास बिल्ड सेटिंग्स में उन्नत विकल्प है? क्या आप C # भाषा संस्करण के लिए विकल्प गायब हैं? क्या आपने संस्करण निर्धारित किया है और भाषा सुविधाओं का उपयोग करने में सक्षम नहीं है?
जेस

@ जेसे: आह, शायद काम कर रहा है। मैंने ध्यान नहीं दिया कि मेरी त्रुटि IntelliSense द्वारा निर्मित नहीं है।
ऊको

यह सेटिंग aspx पृष्ठों में कोड पर लागू नहीं होती है, उदा <% Eval(whatever) %>
क्रिस

5

वेबसाइट प्रोजेक्ट के साथ VS2017 में यह कैसा दिखता है:

यहाँ छवि विवरण दर्ज करें


मैं फसल की नौकरी की सराहना करता हूं @ यूवे लेकिन मुझे नहीं लगता कि मैं बाकी शीर्ष नौसेना को हटाने से सहमत हूं क्योंकि संदर्भ खो गया है जहां यह विशेष मेनू आइटम होना चाहिए।
b_levitt

1
नवीनतम VS 2017 ने इसे 'Build -> ASP.NET संकलन' में स्थानांतरित कर दिया है। देखिये मेरा अपडेटेड जवाब।
वर्टिगो

वेब साइट प्रोजेक्ट प्रकारों के लिए मैंने VS2019 पर @ b_levitt के उत्तर का परीक्षण किया। (1) सुनिश्चित करें कि आपके पास एक web.config है। अगर एक नहीं जोड़ते। (2) समाधान एक्सप्लोरर पर चयन करके और [Ctrl] + [S] जारी करके समाधान सहेजें। (3) समाधान एक्सप्लोरर पर प्रोजेक्ट का चयन करें और लक्ष्य फ्रेमवर्क को 4.7.2 में बदलें (4) मेनू बिल्ड> ASP.NET संकलन से "नवीनतम सी # सक्षम करें" विकल्प चुनें।
डेनी जैकब

2

अपने वेबएपीआई प्रोजेक्ट में शून्य परिवर्तन करने के बाद मुझे यह त्रुटि मिली। मैंने DotNetCompilerPlatform nuget पैकेज को अनइंस्टॉल किया और पुनः स्थापित किया, जिसने समस्या को ठीक किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.