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 „$”
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 „$”
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.
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 niego CodeDom
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.
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.