Czy to jest obsługiwane?
Jeśli tak, czy jest jakaś sztuczka, aby to włączyć? Zakładam, że Razor nie używa wystarczająco nowego kompilatora ...? IDE VS2015 wydaje się być w porządku, ale w czasie wykonywania dostaję
CS1056: Nieoczekiwany znak „$”
c#
asp.net-mvc
razor
c#-6.0
Tim Schmidt
źródło
źródło
Odpowiedzi:
Aktualizacja :
Począwszy od Visual Studio 2015 Update 1, w graficznym interfejsie użytkownika istnieje prosty proces, aby wykonać poniższe kroki. Po prostu kliknij prawym przyciskiem myszy projekt sieci Web i wybierz opcję „Włącz C # 6 / VB 14”. Więcej informacji można znaleźć w poście na blogu MSDN „ Nowa funkcja umożliwiająca włączenie języka C # 6 / VB 14 ”.
Ponieważ ta odpowiedź została napisana, ta funkcja została dodana przy pomocy pakietu NuGet.
Dodaj ten pakiet Nuget do rozwiązania, jeśli używasz MVC5.
https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/
Pakiet nuget powinien modyfikować plik web.config, ale sprawdź, czy następująca konfiguracja znajduje się w pliku web.config (i jeśli nie jest dodawany):
<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=\"Web\" /optionInfer+"/> </compilers> </system.codedom>
W MVC6 jest to wbudowane.
Oryginalna odpowiedź:
<div> @($"Hello {this.Model.SomeProperty}") </div>
Działa to tylko w C # 6 z MVC6. Nawet jeśli używasz MVC5 z kompilatorem C # 6, to nie zadziała.
Sztuczka polega na tym, że parser maszynki do golenia nie jest jeszcze wystarczająco inteligentny, aby rozpoznać niektóre składnie, więc musisz zawinąć całość w nawiasy (musisz to zrobić również, gdy używasz operatora warunkowego zerowego (
?.
) w widokach maszynki do golenia).To powiedziawszy, interpolacja ciągów w Razor jest w tej chwili nieco błędna w MVC6, więc nie zdziwiłbym się, gdyby były z nią jakieś problemy. to, czy zostaną omówione, to inna sprawa.
źródło
Uruchom następujące polecenie w konsoli Menedżera pakietów, aby dodać wymaganego
CodeDom
dostawcę do projektu.web.config
Automatycznie zmodyfikuje plik, aby dodać do niegoCodeDom
wymagane ustawienia.Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Uruchom ponownie
Visual Studio
Uwaga: Jak wspomniał @Jake w swoim komentarzu pod tą odpowiedzią, jeśli masz
DotNetCompilerPlatform
już pakiet, może wymagać aktualizacji.źródło
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.