Cách sử dụng các tính năng c # 8.0 mới trong chế độ xem Dao cạo


14

Tôi đã cập nhật ứng dụng web ASP.NET Mvc 5 của mình để sử dụng các tính năng c # 8.0 mới thông qua Visual Studio 2019 và mọi thứ đều hoạt động tốt cho đến khi tôi cố gắng sử dụng các tính năng mới này trong chế độ xem Dao cạo.

Ví dụ: nếu tôi cố gắng sử dụng biểu thức chuyển đổi mới:

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

Trình biên dịch sẽ không phàn nàn cho đến khi tôi cố gắng truy cập trang, gây ra lỗi biên dịch.

Dịch lỗi

Tôi nghi ngờ rằng Microsoft.CodeDom.Providers.DotNetCompilerPlatformphải được cập nhật nhưng dường như không có bản cập nhật nào.

Có cách nào để sử dụng các tính năng ngôn ngữ c # 8.0 trong chế độ xem Dao cạo không?


điều này sẽ giúp? - stackoverflow.com/questions/31689374/ từ
yob

tốt, đó chính xác là nơi tôi thấy rằng nó có thể liên quan đến Microsoft.CodeDom.Providers.DotNetCompilerPlatformgói nhưng tôi không thể làm cho nó hoạt động cho c # 8.0 bằng cách nào đó
dbraillon

hoạt động với tôi, - Tôi đã cập nhật tham chiếu đến Microsoft.CodeDom.Providers.DotNetCompilerPl
platform

Tôi vừa thử một lần khác với một giải pháp mới: tạo một giải pháp mới với mẫu mvc mặc định với .Net Framework, viết một số mã c # 8.0, studio trực quan hỏi tôi có muốn cập nhật dự án của mình để sử dụng c # 8.0 không, chấp nhận nó sau đó viết nó cùng mã để xem. Nó không biên dịch nhưng sẽ không thực thi trong thời gian chạy ...
dbraillon

Bất kỳ may mắn về vấn đề này?
Eaglei22

Câu trả lời:


6

.net framework hỗ trợ C # 7.3, đó là lý do tại sao bạn không thể làm cho Chế độ xem Dao cạo của mình hoạt động

.net core 3 hỗ trợ C # 8 và tôi đã có thể làm cho ví dụ của bạn hoạt động với ứng dụng .net Core 3 MVC.

Bạn có thể xem tại đây: https://docs.microsoft.com/en-us/dotnet/csharp/lingu-reference/configure-lingu-version

Tôi mong muốn có sự trợ giúp của phía trên :)


Trong khi những gì bạn đang nói là sự thật. Tôi có thể sử dụng C # 8.0 tính năng trong dự án .net 4.7.2 của tôi bằng cách đơn giản thay đổi LangVersiontrong csproj tôi. Tôi thậm chí có thể sử dụng tính năng nullable. Và mã được đề xuất bởi OP biên dịch và chạy tốt. Vì vậy, thật thú vị tại sao điều này không hoạt động cho một ứng dụng ASP.NET.
Thomas Heijtink

@ThomasHeijtink, xem bản cập nhật mới nhất cho Microsoft.CodeDom.Providers.DotNetCompilerPl platform là một năm trước - 13.09.2018. Vì vậy, bây giờ các tính năng C # 8 không được hỗ trợ với trình biên dịch đi kèm.
nửa

1
@ThomasHeijtink, bạn có thể đóng góp cho kho lưu trữ . Tôi tin rằng bạn chỉ cần sử dụng phiên bản cuối cùng của Microsoft.Net.Compilers trong RoslynCodeProvider.sinstall.target : <MSNetCompilersNuGetPackageLatestVersion>3.3.1</MSNetCompilersNuGetPackageLatestVersion>. Bạn có thể xây dựng gói nuget của riêng mình từ các nguồn và sử dụng nó (hoặc thực hiện PR và nhận phản hồi với hy vọng hợp nhất nó thành chủ).
nửa

Có ai đã thử một ngã ba? Tôi không thấy một cái nào trên GitHub (có thêm thay đổi này). Mục tiêu của tôi là chuyển dần một dự án ASP.NET Classic sang cốt lõi và có một số mã bị mắc kẹt trên loại 7.x gây tổn thương đó.
Sören Kuklau

2

OK, có một số điều cần được làm rõ trước tiên.

Theo câu trả lời này, phiên bản ngôn ngữ C # được gắn với khung và C # 8.0 hoàn toàn có sẵn cho tất cả các ngôn ngữ hỗ trợ .Net Standard 2.1. .NET Framework 4.7.2 trở xuống không hỗ trợ .NET Standard 2.1 và nó sẽ không xảy ra trong tương lai.

Trong khi đó, có một cách để sử dụng C # 8.0 nếu bạn chỉ định LangVersion trong bất kỳ tệp dự án .csproj nào:

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

Điều này sẽ cho phép C # 8.0 và một số tính năng khung không ràng buộc sẽ có sẵn cho bạn. Kiểm tra câu trả lời liên kết để biết cái nào.

Cuối cùng, để trả lời câu hỏi của riêng tôi, tại thời điểm này, không, không có cách nào để sử dụng bất kỳ tính năng C # 8.0 nào trong chế độ xem Dao cạo. Quá trình biên dịch thời gian chạy dường như được thực hiện với một gói có tên, Microsoft.CodeDom.Providers.DotNetCompilerPlatformvì vậy cách duy nhất là cập nhật gói đó để cho phép một số tính năng mới được sử dụng.

Tôi sẽ cập nhật câu trả lời đó ngay khi tôi có thêm thông tin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.