2015-06-14 10 views
70

Czy to jest obsługiwane?Interpolacja ciągów w widoku Żyletka?

Jeśli tak, czy jest jakiś trik, aby go włączyć? Zakładam, że Razor nie używa wystarczająco dużo kompilatora ...? VS2015 IDE wydaje się być w porządku z tym, ale w czasie wykonywania otrzymuję

CS1056: Nieoczekiwany znak '$'

+0

można wyświetlić kod mówisz? –

+0

Które ASP.NET używasz (ASP.NET 5: nowy zbudowany na .NET Core lub aktualizacja do ASP.NET 4)? – Richard

+4

W JAKI SPOSÓB TO TEGO ZAWARTA TEMAT?!?!?! Śmieszny. –

Odpowiedz

98

Aktualizacja:

Zaczynając w Visual Studio 2015 Update 1, W GUI jest prosty proces, aby wykonać poniższe czynności. Po prostu kliknij projekt WWW prawym przyciskiem myszy i wybierz "Włącz C# 6/VB 14". Więcej informacji można znaleźć w poście na blogu MSDN "New feature to enable C# 6/VB 14".

Od tej odpowiedzi została napisana ta funkcjonalność została dodana przy pomocy pakietu NuGet.

Dodaj tę paczkę Nuget do swojego rozwiązania, jeśli używasz MVC5.

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

Pakiet Nuget należy zmodyfikować web.config, ale sprawdzić, czy jest następująca konfiguracja w pliku web.config (a jeśli nie to dodaj ją):

<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> 

W MVC6 jest to wbudowane.


Oryginalny odpowiedź:

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

Zadziała tylko w C# 6 z MVC6. Nawet jeśli używasz MVC5 z kompilatorem C# 6, to nie zadziała.

Podstęp polega na tym, że parser maszynki do golenia nie jest wystarczająco inteligentny, aby rozpoznać pewne składnie, więc musisz zawijać całość w nawiasach (musisz to zrobić, używając operatora o wartości zerowej (?.) w widokach maszynki dobrze).

To powiedziawszy, interpolacja struny w Razor jest obecnie w MVC6 a bit buggy, więc nie zdziwiłbym się, gdyby były jakieś problemy. czy będą one adresowane czy nie, to inna kwestia.

+0

Ah, bingo, używałem MVC 5. Dzięki! –

+5

MVC 5.2.3 działa, po prostu trzeba dodać pakiet domena z kodem rosyln dla asp.net. Zobacz tę odpowiedź w niezamkniętym pytaniu: http://stackoverflow.com/a/31548221/637783 – jbtule

+1

przy okazji vs zaktualizował błąd i teraz mówię, że C# 6 nie jest obsługiwany, co jest lepsze – CMS

8
  1. Run następujące polecenie w Package Manager Console dodać wymaganą CodeDom dostawcę do projektu. Zmodyfikuje również automatycznie plik web.config, aby dodać do niego ustawienia CodeDom.

Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform 

  1. RestartVisual Studio
+0

To jest poprawne rozwiązanie już dziś. Z opisu firmy Microsoft: 'Zastąpienie dostawców CodeDOM korzystających z nowego kompilatora platformy .NET (" Roslyn ") jako API usług. Zapewnia to wsparcie dla nowych funkcji językowych w systemach korzystających z CodeDOM (np. Kompilacja środowiska wykonawczego ASP.NET), a także poprawia wydajność kompilacji tych systemów. " –

+0

Dla mojego scenariusza już miałem ten pakiet, ale był to wersja 1.0.5. Aktualizacja do wersji 1.0.8 rozwiązała problem. – Jake