Atualizei meu aplicativo Web ASP.NET Mvc 5 para usar os novos recursos do c # 8.0 através do Visual Studio 2019 e tudo funciona bem até que eu tente usar esses novos recursos dentro de uma exibição do Razor.
Por exemplo, se eu tentar usar a nova expressão de opção:
@{
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>
O compilador não irá reclamar até eu tentar acessar a página, causando um erro de compilação.
Eu suspeito que Microsoft.CodeDom.Providers.DotNetCompilerPlatform
deve ser atualizado, mas parece que não há nenhuma atualização disponível.
Existe alguma maneira de usar os recursos da linguagem c # 8.0 nas visualizações do Razor?
c#
asp.net-mvc
razor
dbraillon
fonte
fonte
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
pacote, mas eu não posso fazê-lo funcionar para c # 8.0 de alguma formaRespostas:
A estrutura .net suporta C # 7.3 e é por isso que você não pode fazer seu Razor View funcionar
O .net core 3 suporta C # 8 e pude fazer seu exemplo funcionar com um aplicativo .net Core 3 MVC.
Você pode dar uma olhada aqui: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version
Espero que o acima ajude :)
fonte
LangVersion
no meu csproj. Eu posso até usar o recurso anulável. E o código sugerido pelo OP compila e roda muito bem. Portanto, é interessante por que isso não funcionaria para um aplicativo ASP.NET.<MSNetCompilersNuGetPackageLatestVersion>3.3.1</MSNetCompilersNuGetPackageLatestVersion>
. Você pode criar seu próprio pacote de nuget a partir das fontes e usá-lo (ou fazer PR e obter feedback com a esperança de mesclá-lo no master).OK, há algumas coisas que precisam ser esclarecidas primeiro.
De acordo com esta resposta , a versão da linguagem C # está vinculada à estrutura e a C # 8.0 está totalmente disponível para todos os idiomas que suportam o .Net Standard 2.1. O .NET Framework 4.7.2 e abaixo não oferece suporte ao .NET Standard 2.1 e não será o caso no futuro.
Enquanto isso, há uma maneira de usar o C # 8.0 se você especificar o LangVersion em qualquer arquivo de projeto .csproj:
Isso habilitará o C # 8.0 e alguns recursos da estrutura não vinculada estarão disponíveis para você. Verifique a resposta do link para saber qual.
Finalmente, para responder à minha própria pergunta, no momento, não, não há como usar nenhum dos recursos do C # 8.0 dentro de uma exibição do Razor. A compilação em tempo de execução parece ser feita com um pacote nomeado,
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
portanto, a única maneira seria atualizar esse pacote para permitir que alguns dos novos recursos sejam usados.Vou atualizar essa resposta assim que receber mais informações.
fonte