Zaktualizowałem moją aplikację internetową ASP.NET Mvc 5, aby korzystała z nowych funkcji c # 8.0 w Visual Studio 2019 i wszystko działa dobrze, dopóki nie spróbuję użyć tych nowych funkcji w widoku Razor.
Na przykład, jeśli spróbuję użyć nowego wyrażenia przełącznika:
@{
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>
Kompilator nie narzeka, dopóki nie spróbuję dotrzeć do strony, co spowoduje błąd kompilacji.
Podejrzewam, że Microsoft.CodeDom.Providers.DotNetCompilerPlatform
należy to zaktualizować, ale wygląda na to, że aktualizacja nie jest dostępna.
Czy istnieje sposób użycia funkcji języka c # 8.0 w widokach Razor?
c#
asp.net-mvc
razor
dbraillon
źródło
źródło
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
pakietem, ale nie mogę w jakiś sposób sprawić, by działał w wersji c # 8.0Odpowiedzi:
.NET Framework obsługuje C # 7.3, dlatego nie możesz sprawić, aby Twój Razor View działał
.net core 3 obsługuje C # 8 i udało mi się sprawić, by Twój przykład działał z aplikacją .net Core 3 MVC.
Możesz zajrzeć tutaj: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version
Mam nadzieję, że powyższe pomaga :)
źródło
LangVersion
w moim csproj. Mogę nawet użyć opcji zerowania. A sugerowany kod OP kompiluje się i działa dobrze. Ciekawe, dlaczego to nie zadziała dla aplikacji ASP.NET.<MSNetCompilersNuGetPackageLatestVersion>3.3.1</MSNetCompilersNuGetPackageLatestVersion>
. Możesz zbudować swój własny pakiet nuget ze źródeł i go użyć (lub zrobić PR i uzyskać opinie z nadzieją na połączenie go w master).OK, więc są pewne rzeczy, które należy najpierw wyjaśnić.
Zgodnie z tą odpowiedzią wersja językowa C # jest powiązana z frameworkiem, a wersja C # 8.0 jest w pełni dostępna dla wszystkich języków, które obsługują .Net Standard 2.1. .NET Framework 4.7.2 i nowsze wersje nie obsługują .NET Standard 2.1 i nie będzie tak w przyszłości.
W międzyczasie istnieje sposób użycia C # 8.0, jeśli określisz LangVersion w dowolnym pliku projektu .csproj:
Umożliwi to C # 8.0, a niektóre funkcje niezwiązanego frameworka będą dostępne dla Ciebie. Sprawdź odpowiedź na link, aby dowiedzieć się, który z nich.
Wreszcie, aby odpowiedzieć na moje własne pytanie, w tej chwili nie, nie ma możliwości użycia żadnej z funkcji C # 8.0 w widoku Razor. Wydaje się, że kompilacja w czasie wykonywania jest wykonywana przy użyciu pakietu o nazwie,
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
więc jedynym sposobem jest aktualizacja tego pakietu, aby umożliwić korzystanie z niektórych nowych funkcji.Zaktualizuję tę odpowiedź, jak tylko uzyskam więcej informacji.
źródło