Saya telah memperbarui aplikasi web ASP.NET Mvc 5 saya untuk menggunakan fitur c # 8.0 baru melalui Visual Studio 2019 dan semuanya berfungsi dengan baik sampai saya mencoba menggunakan fitur-fitur baru ini di dalam tampilan Razor.
Misalnya, jika saya mencoba menggunakan ekspresi sakelar baru:
@{
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>
Kompiler tidak akan mengeluh sampai saya mencoba menjangkau halaman, memberi saya kesalahan kompilasi.
Saya curiga Microsoft.CodeDom.Providers.DotNetCompilerPlatform
harus diperbarui tetapi tampaknya tidak ada pembaruan yang tersedia.
Apakah ada cara untuk menggunakan fitur bahasa c # 8.0 dalam tampilan Razor?
c#
asp.net-mvc
razor
dbraillon
sumber
sumber
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
paket tetapi saya tidak bisa membuatnya bekerja untuk c # 8.0 entah bagaimanaJawaban:
Kerangka kerja bersih mendukung C # 7.3 itu sebabnya Anda tidak dapat membuat Tampilan Razor Anda berfungsi
.net core 3 mendukung C # 8 dan saya dapat membuat contoh Anda berfungsi dengan aplikasi .net Core 3 MVC.
Anda dapat melihatnya di sini: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version
Saya harap bantuan di atas :)
sumber
LangVersion
dalam csproj saya. Saya bahkan dapat menggunakan fitur nullable. Dan kode yang disarankan oleh OP mengkompilasi dan berjalan dengan baik. Jadi, menarik mengapa ini tidak bekerja untuk aplikasi ASP.NET.<MSNetCompilersNuGetPackageLatestVersion>3.3.1</MSNetCompilersNuGetPackageLatestVersion>
. Anda dapat membangun paket nuget Anda sendiri dari sumber dan menggunakannya (atau membuat PR dan mendapatkan umpan balik dengan harapan untuk menggabungkannya menjadi master).OK jadi, ada beberapa hal yang perlu diklarifikasi terlebih dahulu.
Menurut jawaban ini versi bahasa C # terkait dengan kerangka kerja, dan C # 8.0 sepenuhnya tersedia untuk semua bahasa yang mendukung .Net Standard 2.1. .NET Framework 4.7.2 dan di bawah ini tidak mendukung .NET Standard 2.1 dan tidak akan menjadi kasus di masa depan.
Sementara itu ada cara untuk menggunakan C # 8.0 jika Anda menentukan LangVersion dalam file proyek .csproj:
Ini akan mengaktifkan C # 8.0 dan beberapa fitur kerangka kerja tanpa ikatan akan tersedia untuk Anda. Periksa tautan jawaban untuk mengetahui yang mana.
Akhirnya untuk menjawab pertanyaan saya sendiri, saat ini, tidak, tidak ada cara untuk menggunakan salah satu fitur C # 8.0 di dalam tampilan Razor. Kompilasi run-time tampaknya dilakukan dengan paket bernama
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
sehingga satu-satunya cara adalah memperbarui paket itu untuk memungkinkan beberapa fitur baru digunakan.Saya akan memperbarui jawaban itu segera setelah saya mendapatkan informasi lebih lanjut.
sumber