web-dev-qa-db-ja.com

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

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

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

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

87
Tim Schmidt

更新

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を実行している場合でも、機能しません。

秘Theは、カミソリパーサーはまだいくつかの構文を認識できるほどスマートではないため、カミソリビューでnull条件演算子(?.)を使用する場合は、すべてを括弧で囲む必要があります。まあ)。

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

117
vcsjones
  1. 実行次のコマンドをPackage Manager Consoleで必要なCodeDomプロバイダーをプロジェクトに追加します。また、web.configファイルを自動的に変更して、CodeDom require設定を追加します。

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform


  1. 再起動 the Visual Studio

注: As@ Jakeこの回答のコメントで言及されているように、既にDotNetCompilerPlatformパッケージがある場合は、更新してみてください。

12
RAM