Інтерполяція рядків у режимі бритви?


93

Чи підтримується це?

Якщо так, чи є якийсь фокус, щоб увімкнути його? Я припускаю, що Razor не використовує достатньо новий компілятор ...? IDE VS2015, схоже, добре з ним, але під час виконання я отримую

CS1056: Несподіваний символ "$"


Чи можете ви показати код, про який ви говорите?
Jeroen Vannevel

Який ASP.NET ви використовуєте (ASP.NET 5: новий, побудований на .NET Core; або оновлення до ASP.NET 4)?
Річард

6
ЯК ЦЕ НЕ ТЕМА?!?!?! Смішно.
Джош М.

1
Дякую! Я рада, що це сказав ще хтось. Я вважав, що це було дуже корисно, і я особисто знаю двох людей, які мали однакову проблему з тим самим рішенням. Хто, чорт вазьми, тут взагалі відповідає ??
Тім Шмідт,

@TimSchmidt Черга закриття довга, тому іноді питання закриваються неналежним чином. Але черга повторного відкриття коротка, тож якщо її дійсно слід було б знову відкрити, це буде досить швидко.
o11c

Відповіді:


124

Оновлення :

Починаючи з Visual Studio 2015 Update 1, у графічному інтерфейсі є простий процес, який виконує наведені нижче дії. Просто клацніть веб-проект правою кнопкою миші та виберіть "Увімкнути C # 6 / VB 14". Детальніша інформація доступна у дописі блогу MSDN " Нова функція для ввімкнення C # 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>

Це працює лише в C # 6 з MVC6. Навіть якщо ви використовуєте MVC5 із компілятором C # 6, це не буде працювати.

Фокус у тому, що аналізатор бритви ще недостатньо розумний, щоб розпізнавати деякі синтаксиси, тому ви повинні обернути все це в дужках (це потрібно зробити, використовуючи нульовий умовний оператор ( ?.) також у ваших видах бритви).

Тим не менш, інтерполяція рядків у Razor на даний момент у MVC6 трохи глючить , тому я не здивуюся, якщо з цим виникнуть деякі проблеми. інша справа - чи будуть вони вирішені чи ні.


Ах, бінго, я використовував MVC 5. Дякую!
Тім Шмідт,

5
MVC 5.2.3 працює, вам потрібно лише додати пакет dom код коду rosyln для asp.net. Дивіться цей відповідь в не закриті питання: stackoverflow.com/a/31548221/637783
jbtule

1
до речі vs оновив помилку, і тепер я кажу, що c # 6 не підтримується, що краще
CMS

1
Навіть після встановлення цього пакета NuGet, який також оновив Web.Config, я все одно отримую таке повідомлення про помилку як підказку: "Функція" null propagating operator "недоступна в C # 5. Будь ласка, використовуйте мовну версію 6 або новішу."
Super Coder

1
У мене не було опції "Увімкнути C # 6 / VB 14" у меню правої кнопки миші. Але він був у мене в Visual Studio, меню Project, тому я ввімкнув його звідти. Дякую.
HasanG

14
  1. Виконайте наступну команду в консолі Package Manager, щоб додати потрібного CodeDomпостачальника до свого проекту. Він автоматично змінить ваш web.configфайл, щоб додати CodeDomдо нього необхідні налаштування.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. Перезапустіть Visual Studio

Примітка: Як @Jake зазначав у своєму коментарі під цією відповіддю, якщо у вас вже є DotNetCompilerPlatformпакет, можливо, його просто потрібно оновити.


Це правильне рішення сьогодні. З опису корпорації Майкрософт: 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.
Луїс Феррао

1
Для мого сценарію у мене вже був цей пакет, але це була версія 1.0.5. Оновлення до 1.0.8 вирішило проблему.
Джейк

Перезапуск Visual Studio для мене не був необхідним.
Джонатан Барклай,

@JohnathanBarclay перезапуск був необхідний у моєму випадку. Я думаю, можна з упевненістю припустити, що це буде необхідно для деяких людей.
Loudenvier
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.