रेजर विचारों में नए c # 8.0 सुविधाओं का उपयोग कैसे करें


14

मैंने विज़ुअल स्टूडियो 2019 के माध्यम से नए c # 8.0 सुविधाओं का उपयोग करने के लिए अपने ASP.NET Mvc 5 वेब एप्लिकेशन को अपडेट किया है और जब तक मैं रेजर व्यू के अंदर इन नई सुविधाओं का उपयोग करने की कोशिश नहीं करता तब तक सब कुछ ठीक रहता है।

उदाहरण के लिए, यदि मैं नई स्विच अभिव्यक्ति का उपयोग करने का प्रयास करता हूं:

@{
    ViewBag.Title = "About";

    var foo = 1;
    var bar = foo switch
    {
        1 => "one",
        2 => "two",
        _ => string.Empty
    };
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>

<p>Use this area to provide additional information.</p>

कंपाइलर तब तक शिकायत नहीं करेगा जब तक मैं पेज पर पहुँचने की कोशिश नहीं करूँगा, मुझे एक संकलन त्रुटि देगा।

संकलन त्रुटि

मुझे संदेह है कि Microsoft.CodeDom.Providers.DotNetCompilerPlatformअद्यतन किया जाना चाहिए, लेकिन ऐसा लगता है कि कोई अद्यतन उपलब्ध नहीं है।

रेजर व्यूज में c # 8.0 लैंग्वेज फीचर्स का उपयोग करने का कोई तरीका है?


क्या यह मदद करेगा? - stackoverflow.com/questions/31689374/…
yob

ठीक है, यह ठीक है जहाँ मैंने पाया कि यह शायद Microsoft.CodeDom.Providers.DotNetCompilerPlatformपैकेज से संबंधित है, लेकिन मैं इसे किसी भी तरह से सी # 8.0 के लिए काम नहीं कर सकता
9

मेरे लिए काम करता है, - मैं # 2.0.1 संस्करण के लिए Microsoft.CodeDom.Providers.DotNetCompilerPlatform के लिए अद्यतन संदर्भ (स्थापित-पैकेज Microsoft.CodeDom.Providers.DotNetCompilerPlatform -संस्करण 2.0.1)
yob

मैंने अभी एक नए समाधान के साथ एक और समय की कोशिश की: .Net फ्रेमवर्क के साथ डिफ़ॉल्ट mvc टेम्पलेट के साथ एक नया समाधान बनाएं, कुछ c # 8.0 कोड लिखें, विजुअल स्टूडियो पूछें कि क्या मैं c # 8.0 का उपयोग करने के लिए अपनी परियोजना को अपडेट करना चाहता हूं, तो इसे स्वीकार करें और फिर लिखें देखने के लिए समान कोड। यह संकलन करता है, लेकिन रनटाइम पर निष्पादित नहीं होगा ...
dbraillon

इस मुद्दे पर कोई भाग्य?
eaglei22

जवाबों:


6

.net फ्रेमवर्क C # 7.3 का समर्थन करता है यही कारण है कि आप अपने रेजर व्यू को काम नहीं कर सकते हैं

.net Core 3 C # 8 का समर्थन करता है और मैं एक .net Core 3 MVC ऐप के साथ आपके उदाहरण को काम करने में सक्षम था।

आप यहाँ देख सकते हैं: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version

मुझे आशा है कि उपरोक्त मदद करता है :)


जबकि आप जो कह रहे हैं वह सच है। मैं अपने csproj में बस बदलकर अपने .net 4.7.2 परियोजना में C # 8.0 सुविधाओं का उपयोग करने में सक्षम LangVersionहूं। मैं भी अशक्त सुविधा का उपयोग कर सकते हैं। और ओपी द्वारा सुझाया गया कोड संकलित करता है और ठीक चलता है। तो यह दिलचस्प है कि यह ASP.NET अनुप्रयोग के लिए काम क्यों नहीं करेगा।
थॉमस हिजटिंक

@ThomasHeijtink, Microsoft के लिए अंतिम अपडेट देखें। CodeDom.Providers.DotNetCompilerPlatform एक साल पहले था - 13.09.2018। तो, अब बंडल संकलक के साथ C # 8 सुविधाओं का समर्थन नहीं किया गया है।
हॉल

1
@ThomasHeijtink, आप रिपॉजिटरी में योगदान कर सकते हैं । मेरा मानना है कि आप बस के पिछले संस्करण का उपयोग करने की आवश्यकता है Microsoft.Net.Compilers में RoslynCodeProvider.settings.targets : <MSNetCompilersNuGetPackageLatestVersion>3.3.1</MSNetCompilersNuGetPackageLatestVersion>। आप स्रोतों से अपना खुद का नगेट पैकेज बना सकते हैं और इसका उपयोग कर सकते हैं (या पीआर बना सकते हैं और इसे मास्टर में विलय करने की आशा के साथ प्रतिक्रिया प्राप्त कर सकते हैं)।
हॉल

क्या किसी ने कांटा लगाने का प्रयास किया है? मैं GitHub पर एक नहीं देखता (जो इस बदलाव को जोड़ता है)। मेरा लक्ष्य धीरे-धीरे एक ASP.NET क्लासिक प्रोजेक्ट को कोर में बदलना है, और कुछ कोड 7.x तरह की चोट पर अटक जाते हैं।
सोरेन कुक्लाउ

2

ठीक है, कुछ चीजें हैं जिन्हें पहले स्पष्ट करने की आवश्यकता है।

इस उत्तर के अनुसार C # भाषा संस्करण ढांचे के साथ बंधा हुआ है, और C # 8.0 पूरी तरह से सभी भाषाओं के लिए उपलब्ध है। .NET मानक 2.1। .NET फ्रेमवर्क 4.7.2 और नीचे .NET मानक 2.1 का समर्थन नहीं करता है और भविष्य में ऐसा नहीं होगा।

इस बीच यदि आप किसी .csproj प्रोजेक्ट फ़ाइल में LangVersion निर्दिष्ट करते हैं तो C # 8.0 का उपयोग करने का एक तरीका है:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net48</TargetFrameworks>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>

यह C # 8.0 को सक्षम करेगा और कुछ गैर-बंधी हुई रूपरेखा सुविधाएँ आपके लिए उपलब्ध होंगी। यह जानने के लिए लिंक उत्तर की जाँच करें।

अंत में मेरे अपने प्रश्न का उत्तर देने के लिए, इस समय, नहीं, रेजर दृश्य के अंदर C # 8.0 सुविधाओं में से किसी का उपयोग करने का कोई तरीका नहीं है। रन-टाइम संकलन एक पैकेज के साथ किया जाता है, जिसका नाम Microsoft.CodeDom.Providers.DotNetCompilerPlatformएकमात्र तरीका है उस पैकेज को अपडेट करने के लिए कुछ नई सुविधाओं का उपयोग करने की अनुमति देना।

अधिक जानकारी मिलते ही मैं उस उत्तर को अपडेट कर दूंगा।

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