Строковая интерполяция в представлении "Бритва"?

Поддерживается ли это?

Если да, есть ли какой-то трюк, чтобы включить его? Я предполагаю, что Razor не использует новый достаточно компилятор...? VS2015 IDE, кажется, в порядке с ним, но во время выполнения я получаю

CS1056: Неожиданный символ '$'

Ответ 1

Обновление

Начиная с обновления Visual Studio 2015 Update 1, в графическом интерфейсе есть простой процесс, чтобы сделать следующие шаги для вас. Просто щелкните правой кнопкой мыши свой веб-проект и выберите "Включить С# 6/VB 14". Более подробная информация доступна в сообщении в блоге MSDN, Новая функция для включения С# 6/VB 14".

Поскольку этот ответ был написан, эта функциональность была добавлена ​​с помощью пакета NuGet.

Добавьте этот пакет Nuget к вашему решению, если вы используете MVC5.

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>

Это работает только в С# 6 с MVC6. Даже если вы используете MVC5 с компилятором С# 6, это не сработает.

Хитрость заключается в том, что анализатор бритвы недостаточно умен, чтобы распознавать некоторые синтаксисы, поэтому вы должны обернуть все это в круглых скобках (вы должны сделать это при использовании оператора с нулевым условием (?.) в ваших бритвах также).

Тем не менее, строка интерполяции в Razor немного багги на данный момент в MVC6, поэтому я не удивлюсь, если возникнут некоторые проблемы. будут ли они адресованы или нет, это другое дело.

Ответ 2

  • Запустите следующую команду в Package Manager Console, чтобы добавить в проект необходимого поставщика CodeDom. Он также автоматически изменяет ваш файл web.config, чтобы добавить CodeDom для него необходимые настройки.

Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  1. Перезапустить Visual Studio