2015-06-14 40 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