Jilet görünümlerinde yeni c # 8.0 özellikleri nasıl kullanılır


14

ASP.NET Mvc 5 web uygulamamı Visual Studio 2019 aracılığıyla yeni c # 8.0 özelliklerini kullanacak şekilde güncelledim ve bu yeni özellikleri bir Razor görünümünde kullanmaya çalışana kadar her şey iyi çalışıyor.

Örneğin, yeni anahtar ifadesini kullanmaya çalışırsam:

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

Derleyici, sayfaya ulaşmaya çalışana kadar şikayet etmeyecek ve bana bir derleme hatası veriyor.

Derleme Hatası

Bunun Microsoft.CodeDom.Providers.DotNetCompilerPlatformgüncellenmesi gerektiğinden şüpheleniyorum ancak kullanılabilir güncelleme yok gibi görünüyor.

Razor görünümlerinde c # 8.0 dil özelliklerini kullanmanın bir yolu var mı?


bu yardımcı olacak mı? - stackoverflow.com/questions/31689374/…
yob

Peki, bu tam olarak muhtemelen Microsoft.CodeDom.Providers.DotNetCompilerPlatformpaket ile ilgili olduğunu buldum ama bir şekilde c # 8.0 için çalıştıramazsınız
dbraillon

benim için çalışıyor, - Ben sürüm 2.0.1 için Microsoft.CodeDom.Providers.DotNetCompilerPlatform referans güncelledi (Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -Version 2.0.1)
yob

Ben sadece yeni bir çözüm ile başka bir zaman denedim: .Net Framework ile varsayılan mvc şablonu ile yeni bir çözüm oluşturmak, bazı c # 8.0 kodu yazmak, visual studio c # 8.0 kullanmak için projemi güncellemek isteyip istemediğini sormak, kabul etmek ve sonra çok yazmak bir görünümle aynı kodu girin. Derleme yapar ancak çalışma zamanında yürütülmez ...
dbraillon

Bu konuda şansın var mı?
eaglei22

Yanıtlar:


6

.net framework C # 7.3'ü destekliyor, bu yüzden Razor View'unuzu çalıştıramazsınız

.net core 3, C # 8'i destekler ve örneğinizin bir .net Core 3 MVC uygulamasıyla çalışmasını sağlayabildim.

Burada bir göz atabilirsiniz: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version

Umarım yukarıdaki yardımcı olur :)


Söyledikleriniz doğru olsa da. Ben değilim sadece değiştirerek benim .net 4.7.2 projesinde C # 8.0 özelliklerini kullanabilmek için LangVersionbenim csproj içinde. Sıfırlanabilir özelliği bile kullanabilirim. Ve OP tarafından önerilen kod derler ve gayet iyi çalışır. Bunun neden bir ASP.NET uygulaması için işe yaramayacağı ilginç.
Thomas Heijtink

@ ThomasHeijtink, Microsoft.CodeDom.Providers.DotNetCompilerPlatform için son güncellemeye bakın bir yıl önce - 13.09.2018. Yani, şimdi C # 8 özellikleri birlikte gelen derleyici ile desteklenmiyor.
Hal

1
@ThomasHeijtink, depoya katkıda bulunabilirsiniz . Ben sadece son sürümünü kullanmanız gerekir inanıyoruz Microsoft.Net.Compilers içinde RoslynCodeProvider.settings.targets : <MSNetCompilersNuGetPackageLatestVersion>3.3.1</MSNetCompilersNuGetPackageLatestVersion>. Kendi nuget paketinizi kaynaklardan oluşturabilir ve kullanabilirsiniz (veya PR yapabilir ve üstatla birleştirmek ümidiyle geri bildirim alabilirsiniz).
Hal

Herkes çatal denedi mi? GitHub'da (bu değişikliği ekleyen) bir tane görmüyorum. Amacım yavaş yavaş bir ASP.NET Classic projesini çekirdeğe geçirmek ve 7.x türünde bazı kodların sıkışmasını sağlamak acı veriyor.
Sören Kuklau

2

Tamam, önce açıklığa kavuşturulması gereken bazı şeyler var.

Bu cevaba göre C # dili sürümü çerçeveye bağlıdır ve C # 8.0 .Net Standard 2.1'i destekleyen tüm diller için tamamen kullanılabilir. .NET Framework 4.7.2 ve önceki sürümler, .NET Standard 2.1'i desteklemez ve gelecekte böyle olmayacaktır.

Bu arada herhangi bir .csproj proje dosyasında LangVersion'u belirtirseniz C # 8.0 kullanmanın bir yolu vardır:

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

Bu, C # 8.0'ı etkinleştirecek ve bazı bağlı olmayan çerçeve özellikleri kullanabileceksiniz. Hangisini öğrenmek için bağlantı cevabını kontrol edin.

Sonunda kendi sorumu cevaplamak için, şu anda, hayır, bir Jilet görünümünde C # 8.0 özelliklerinden herhangi birini kullanmanın bir yolu yoktur. Çalışma zamanı derlemesi, adlandırılmış bir paketle yapılıyor gibi görünüyor, Microsoft.CodeDom.Providers.DotNetCompilerPlatformbu yüzden yeni özelliklerin bazılarının kullanılmasına izin vermek için bu paketi güncellemektir.

Daha fazla bilgi alır almaz bu cevabı güncelleyeceğim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.