Razorビューで新しいC#8.0機能を使用する方法


14

ASP.NET Mvc 5 Webアプリケーションを更新して、Visual Studio 2019を通じて新しいc#8.0機能を使用しました。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言語機能を使用する方法はありますか?


これは役に立ちますか?- stackoverflow.com/questions/31689374/...
YOB

まあ、それはまさにそれがおそらく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コードを記述します。VisualStudioはプロジェクトを更新して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に。nullable機能を使用することもできます。そして、OPによって提案されたコードは正常にコンパイルおよび実行されます。したがって、これがASP.NETアプリケーションで機能しないのは興味深いことです。
Thomas Heijtink

@ ThomasHeijtink、Microsoft.CodeDom.Providers.DotNetCompilerPlatformの最終更新を参照してください-1年前-13.09.2018。そのため、C#8機能は、バンドルされたコンパイラではサポートされなくなりました。
2019年

1
@ThomasHeijtink、あなたはリポジトリに貢献できます。私はあなただけの最後のバージョンを使用する必要があると考えていMicrosoft.Net.CompilersのRoslynCodeProvider.settings.targets<MSNetCompilersNuGetPackageLatestVersion>3.3.1</MSNetCompilersNuGetPackageLatestVersion>。ソースから独自のnugetパッケージを構築して使用できます(またはPRを作成し、それをマスターにマージすることを希望してフィードバックを取得します)。
2019年

誰かがフォークを試みましたか?GitHubには表示されません(この変更が追加されます)。私の目標は、ASP.NETクラシックプロジェクトを徐々にコアに移行することであり、7.xでスタックしているコードがあると、それが害になります。
ソレン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.