Razorビューでの文字列補間?


93

これはサポートされていますか?

もしそうなら、それを有効にするためのいくつかのトリックはありますか?Razorが十分に新しいコンパイラを使用していないと思います...?VS2015 IDEはそれで問題ないようですが、実行時に私は得ています

CS1056:予期しない文字「$」


あなたが話しているコードを見せてもらえますか?
Jeroen Vannevel 2015年

どのASP.NETを使用していますか(ASP.NET 5:.NET Core上に構築された新しいもの、またはASP.NET 4への更新)。
Richard

6
これはオフトピックですか?!?!?!ばかげた。
Josh M.

1
ありがとうございました!他の誰かがそう言ってよかった。私はそれがかなり役に立ったと思いました、そして私は同じ解決策で同じ問題を抱えた2人を個人的に知っています。とにかくここで誰が責任を負うのですか?
Tim Schmidt、

@TimSchmidtクローズキューが長いため、質問が不適切にクローズされることがあります。ただし、再オープンキューは短いため、本当に再オープンする必要がある場合は、かなり速くなります。
o11c 2015

回答:


124

更新

Visual Studio 2015 Update 1以降、GUIには以下の手順を実行する簡単なプロセスがあります。Webプロジェクトを右クリックして、「C#6 / VB 14を有効にする」を選択するだけです。詳細については、MSDNブログの投稿「C#6 / VB 14を有効にする新機能」を参照してください。

この回答が書かれてから、この機能はNuGetパッケージの支援を受けて追加されました。

MVC5を使用している場合は、このNugetパッケージをソリューションに追加します。

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

nugetパッケージはweb.configを変更する必要がありますが、次の構成がweb.configファイルにあることを確認してください(追加されていない場合)。

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

MVC6では、これは組み込みです。


元の答え:

<div>
    @($"Hello {this.Model.SomeProperty}")
</div>

これは、MVC6を備えたC#6でのみ機能します。C#6コンパイラーでMVC5を実行している場合でも、機能しません。

トリックは、かみそりパーサーはまだいくつかの構文を認識するほどスマートではないため、全体をかっこで囲む必要があります(?.かみそりビューでnull条件演算子()を使用する場合もこれを行う必要があります)。

とは言っても、Razorの文字列補間はMVC6の現時点では少しバグが多いので、問題があったとしても驚かないでしょう。それらが扱われるかどうかは別の問題です。


ああ、ビンゴ、私はMVC 5を使用していた。ありがとう!
Tim Schmidt

5
MVC 5.2.3は機能します。asp.netのrosylnコードdomパッケージを追加するだけです。閉じられていない質問でこの回答を参照してください:stackoverflow.com/a/31548221/637783
jbtule '21 / 07/21

1
エラーを更新し、今私は、C#6は、どれが優れている、サポートされていないと言う対経由で
CMS

1
Web.Configも更新したこのNuGetパッケージをインストールした後でも、ツールヒントとして次のエラーメッセージが引き続き表示されます。
スーパーコーダー2016

1
右クリックメニューに[C#6 / VB 14を有効にする]オプションがありませんでした。しかし、私はそれをVisual StudioのProjectメニューに持っていたので、そこから有効にしました。ありがとう。
HasanG 2017年

14
  1. パッケージマネージャーコンソールで次のコマンドを実行して、必要なCodeDomプロバイダーをプロジェクトに追加します。必要な設定をweb.config追加するCodeDomためにファイルを自動的に変更します。

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. 再起動 Visual Studio

注:として@Jakeはあなたが持っている場合は、この答えの下で彼のコメントで述べたDotNetCompilerPlatformすでにそれだけで更新する必要があり、パッケージを。


これが今日の正しい解決策です。Microsoftの説明から: Replacement CodeDOM providers that use the new .NET Compiler Platform ("Roslyn") compiler as a service APIs. This provides support for new language features in systems using CodeDOM (e.g. ASP.NET runtime compilation) as well as improving the compilation performance of these systems.
Luis Ferrao 2017年

1
私のシナリオでは、このパッケージは既に持っていましたが、バージョン1.0.5でした。1.0.8にアップデートすると問題が解決しました。
ジェイク

Visual Studioを再起動する必要はありませんでした。
Johnathan Barclay

@JohnathanBarclay私の場合、再起動が必要でした。一部の人にとっては必要だと思い込んでも大丈夫だと思います。
Loudenvier
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.