ASP.NET Core 2.0 preview 2 では C# 7.1 の構文がRazor Viewの中で使えなかった話

このissueのやり取りがすべてなんですが、備忘録として残しておきます。

github.com

.NET Core 2.0 / ASP.NET Core 2.0のタイミングでC# 7.1が利用可能になる予定で、実際preview 2の時点で利用可能です。

blogs.msdn.microsoft.com

このブログには"Razor Support for C# 7.1"とあって<LangVersion>latest</LangVersion>をプロジェクトのプロパティにつけろと書いてありますが、Razor内に限らずC# 7.1の構文を利用するにはこのプロパティを追加しておく必要がありそうです。そもそもC# 7.1で追加される機能についてはこちらが詳しいです。

ufcpp.net

で、実際にRazorの中にC# 7.1の機能を使ったコードを書くとVisual Studio上でのコンパイルエラーは見えないし、ASP.NET Coreのアプリも起動まではするのですが、該当ページへアクセスしようとするとRazorがコンパイルできないというエラーが出ます。ASP.NET Core 2.0ではデフォルトのテンプレートで発行時のRazorコンパイルが有効になっているのですが、実際 dotnet publish するとその段階でコンパイルエラーを検出します。

で、冒頭のissueに戻るのですが、どうやらpreview 2のバグのようで、現在作業中のRTMでは修正済みとなっています。開発中のRTMを利用するには、まず.NET Core SDKをここからダウンロードしてインストールしたうえで、

github.com

ASP.NET Coreのパッケージをmyget経由でRTM版にアップデートします。具体的にはNuGet.configを追加して、

<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="dotnet-2-0-0-rtm" value="https://dotnet.myget.org/F/dotnet-2-0-0-rtm/api/v3/index.json" /> </packageSources> </configuration> 

参照するパッケージをRTMにあげます。

 <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> </ItemGroup> <ItemGroup> <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" /> </ItemGroup> 

これで<LangVersion>latest</LangVersion>と指定すればRazorの中でもC# 7.1の構文が使えるようになります。なお、<LangVersion>7.1</LangVersion>とバージョン番号を指定することもできるのですが、こちらはRTMでもバグが残っていて、これを回避するにはこのコメントにあるワークアラウンドを適用する必要があります。

コメントを書く

ASP.NET Core 2.0 preview 2 では C# 7.1 の構文がRazor Viewの中で使えなかった話

プロフィール
id:tanaka733 はてなブログPro

Twitter: @tanaka_733 Microsoft MVP for Azure このサイトでは、トラフィックの分析と広告の測定を目的として Cookie が使用されます。 詳細など、このブログに関するお問い合わせはこちらから https://forms.gle/UiBRq4ztZu5bYqeo7

注目記事