면도기보기에서 새로운 c # 8.0 기능을 사용하는 방법


14

Visual Studio 2019를 통해 새로운 c # 8.0 기능을 사용하도록 ASP.NET Mvc 5 웹 응용 프로그램을 업데이트했으며 이러한 새로운 기능을 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업데이트해야한다고 생각 하지만 사용 가능한 업데이트가없는 것 같습니다.

Razor보기에서 c # 8.0 언어 기능을 사용하는 방법이 있습니까?



내가 아마 관련이 있음을 발견 한 곳 글쎄, 그건 정확히 Microsoft.CodeDom.Providers.DotNetCompilerPlatform패키지하지만 난 어떻게 든 C # 8.0 일을 할 수 없습니다
dbraillon

나를 위해 일합니다-Microsoft.CodeDom.Providers.DotNetCompilerPlatform에 대한 참조를 버전 # 2.0.1로 업데이트했습니다 (Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -Version 2.0.1)
yob

방금 새 솔루션으로 다른 시간을 보냈습니다 : .Net Framework를 사용하여 기본 mvc 템플릿으로 새 솔루션을 만들고 일부 C # 8.0 코드를 작성하십시오 .Visual Studio는 C # 8.0을 사용하도록 프로젝트를 업데이트하고 싶은지 묻습니다. 뷰에 동일한 코드. 그것은 컴파일하지만 런타임에 실행되지 않습니다 ...
dbraillon

이 문제에 행운이 있습니까?
eaglei22

답변:


6

.net 프레임 워크는 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 에서 확인할 수 있습니다.

위의 도움이되기를 바랍니다 :)


당신이 말하는 것은 사실입니다. 나는 나는 단순히을 변경하여 내 .NET 4.7.2 프로젝트에서 C # 8.0 기능을 사용할 수 있도록 LangVersion내 csproj에. 심지어 널 입력 가능 기능을 사용할 수도 있습니다. 그리고 OP가 제안한 코드는 컴파일되고 잘 실행됩니다. 이것이 왜 ASP.NET 응용 프로그램에서 작동하지 않는지 흥미 롭습니다.
Thomas Heijtink '17

@ThomasHeijtink, Microsoft.CodeDom.Providers.DotNetCompilerPlatform의 최신 업데이트 는 1 년 전-13.09.2018입니다. 따라서 이제 C # 8 기능은 번들 컴파일러에서 지원되지 않습니다.
19:11.

1
@ThomasHeijtink, 당신은 저장소에 기여할 있습니다. 나는 당신이 단지의 마지막 버전 사용할 필요가 생각 Microsoft.Net.Compilers을RoslynCodeProvider.settings.targets : <MSNetCompilersNuGetPackageLatestVersion>3.3.1</MSNetCompilersNuGetPackageLatestVersion>. 소스에서 자신 만의 nuget 패키지를 빌드하여 사용하거나 PR을 만들고 마스터로 병합하려는 희망으로 피드백을받을 수 있습니다.
19:11.

포크를 시도한 사람이 있습니까? GitHub에서이 변경 사항을 추가하는 것을 볼 수 없습니다. 내 목표는 점차적으로 ASP.NET 클래식 프로젝트를 코어로 전환하고 7.x 종류의 코드를 사용하여 문제를 해결하는 것입니다.
Sören Kuklau

2

자, 먼저 명확히해야 할 것이 있습니다.

이 답변 에 따르면 C # 언어 버전은 프레임 워크와 연결되어 있으며 C # 8.0은 .Net Standard 2.1을 지원하는 모든 언어에서 완벽하게 사용할 수 있습니다. .NET Framework 4.7.2 이하는 .NET Standard 2.1을 지원하지 않으며 앞으로는 그렇지 않습니다.

한편 .csproj 프로젝트 파일에서 LangVersion을 지정하면 C # 8.0을 사용하는 방법이 있습니다.

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

이것은 C # 8.0을 가능하게하고, 비 연결 프레임 워크 기능을 사용할 수있게됩니다. 링크 답변을 확인하여 어느 것을 알고 있는지 확인하십시오.

마지막으로 내 자신의 질문에 대답하기 위해 현재로서는 Razor보기에서 C # 8.0 기능을 사용할 수있는 방법이 없습니다. 런타임 컴파일은 이름이 지정된 패키지로 수행되는 것 같습니다Microsoft.CodeDom.Providers.DotNetCompilerPlatform 므로 유일한 새로운 기능 중 일부를 사용할 수 있도록 패키지를 업데이트하는 것이 유일한 방법입니다.

더 많은 정보를 얻 자마자 그 답변을 업데이트하겠습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.