Я обновил свое веб-приложение ASP.NET Mvc 5 для использования новых функций c # 8.0 через Visual Studio 2019, и все работает нормально, пока я не попытаюсь использовать эти новые функции в представлении Razor.
Например, если я попытаюсь использовать новое выражение переключателя:
@{
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 в представлениях Razor?
c#
asp.net-mvc
razor
dbraillon
источник
источник
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
пакетом, но я не могу заставить его работать как-то для c # 8.0Ответы:
.net Framework поддерживает C # 7.3, поэтому вы не можете заставить работать Razor View
.net core 3 поддерживает C # 8, и я смог заставить ваш пример работать с приложением .net Core 3 MVC.
Вы можете посмотреть здесь: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version
Я надеюсь, что выше помогает :)
источник
LangVersion
в моем csproj. Я даже могу использовать функцию Nullable. И предложенный код OP компилируется и работает просто отлично. Поэтому интересно, почему это не будет работать для приложения ASP.NET.<MSNetCompilersNuGetPackageLatestVersion>3.3.1</MSNetCompilersNuGetPackageLatestVersion>
. Вы можете создать свой собственный пакет nuget из источников и использовать его (или сделать PR и получить обратную связь с надеждами объединить его в master).Итак, есть некоторые вещи, которые необходимо уточнить в первую очередь.
Согласно этому ответу версия языка C # связана с платформой, а C # 8.0 полностью доступен для всех языков, поддерживающих .Net Standard 2.1. .NET Framework 4.7.2 и ниже не поддерживает .NET Standard 2.1, и это не будет иметь место в будущем.
Тем временем есть способ использовать C # 8.0, если вы указали LangVersion в любом файле проекта .csproj:
Это активирует C # 8.0, и вам будут доступны некоторые не связанные функции фреймворка. Проверьте ссылку ответ, чтобы узнать, какой.
Наконец, чтобы ответить на мой собственный вопрос, в настоящее время нет способа использовать какие-либо функции C # 8.0 в представлении Razor. Компиляция во время выполнения, похоже, выполняется с использованием названного пакета,
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
поэтому единственный способ - обновить этот пакет, чтобы позволить использовать некоторые новые функции.Я обновлю этот ответ, как только получу больше информации.
источник