2015-06-14 68 views
70

這是否支持?剃刀視圖中的字符串插值?

如果是這樣,是否有一些技巧可以啓用它?我假設Razor沒有使用足夠新的編譯器......?在VS2015 IDE似乎與它的罰款,但在運行時我得到

CS1056:意外的字符 '$'

+0

你能告訴你在談論的代碼? –

+0

您正在使用哪個ASP.NET(ASP.NET 5:構建於.NET Core上的新建;還是ASP.NET 4的更新)? – Richard

+4

這是關閉的主題?!?!?!荒謬。 –

回答

98

更新

開始在Visual Studio 2015年更新1,在GUI中有一個簡單的過程來爲您執行以下步驟。只需右鍵單擊您的Web項目並選擇「啓用C#6/VB 14」。有關更多信息,請參閱MSDN博客文章「New feature to enable C# 6/VB 14」。

由於這個答案是這樣寫的,所以這個功能是在NuGet包的幫助下添加的。

如果您使用的是MVC5,請將此Nuget包添加到您的解決方案中。

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。即使您正在使用C#6編譯器運行MVC5,它也不起作用。

訣竅是,剃刀分析器還不夠聰明,以至於無法識別某些語法,因此您必須將所有內容包含在圓括號中(您必須在剃刀視圖中使用空條件運算符(?.)好)。

也就是說,Razor中的字符串插值是a bit buggy此刻在MVC6中,所以如果它存在一些問題,我不會感到驚訝。不管他們是否會被處理是另一回事。

+0

啊,賓果,我正在使用MVC 5.謝謝! –

+5

MVC 5.2.3確實有效,您只需爲asp.net添加rosyln代碼dom包。在一個非關閉的問題中看到這個答案:http://stackoverflow.com/a/31548221/637783 – jbtule

+1

順便說一句vs更新錯誤,現在我說c#6不被支持,這是更好的 – CMS

8
  1. 運行在以下命令你Package Manager Console到所需CodeDom提供程序添加到您的項目。它也會自動修改您的web.config文件,以便爲其添加CodeDom需要的設置。

Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform 

  • 重啓Visual Studio
  • +0

    今天是正確的解決方案。來自微軟的描述: '使用新的.NET編譯器平臺(「Roslyn」)編譯器作爲服務API的替代CodeDOM提供者。這爲使用CodeDOM的系統中的新語言功能提供了支持(例如ASP.NET運行時編譯),並提高了這些系統的編譯性能。 –

    +0

    對於我的場景,我已經有了這個包,但它是1.0.5版。更新到1.0.8解決了這個問題。 – Jake