【问题标题】:String interpolation in a Razor view?Razor 视图中的字符串插值?
【发布时间】:2015-08-30 05:02:49
【问题描述】:

支持吗?

如果是这样,启用它有什么技巧吗?我假设 Razor 没有使用足够新的编译器......? VS2015 IDE 似乎很好,但在运行时我得到了

CS1056:意外字符“$”

【问题讨论】:

  • 你能显示你正在谈论的代码吗?
  • 您使用的是哪个 ASP.NET(ASP.NET 5:基于 .NET Core 构建的新版本;或更新到 ASP.NET 4)?
  • 谢谢!我很高兴别人这么说。我认为这很有帮助,而且我个人认识 2 个人使用相同的解决方案遇到相同的问题。到底是谁在这里负责??
  • @TimSchmidt 关闭队列很长,因此有时问题会不恰当地关闭。但是重开队列很短,所以如果真的要重开的话,会很快的。

标签: c# asp.net-mvc razor c#-6.0


【解决方案1】:
  1. 包管理器控制台

    运行以下命令,将所需的CodeDom 提供程序添加到您的项目中。它会自动修改您的web.config 文件以添加CodeDom 所需的设置。

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. 重启 Visual Studio

注意:正如 @Jake 在此答案下的评论中提到的,如果您已经拥有 DotNetCompilerPlatform 软件包,则可能只需要更新它。

【讨论】:

  • 这是今天正确的解决方案。来自微软的描述: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.
  • 对于我的场景,我已经有了这个包,但它是 1.0.5 版。更新到 1.0.8 解决了这个问题。
  • 我不需要重新启动 Visual Studio。
  • @JohnathanBarclay 在我的情况下重启是必要的。我认为可以肯定地假设某些人有必要这样做。
【解决方案2】:

更新

从 Visual Studio 2015 Update 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>

这仅适用于带有 MVC6 的 C# 6。即使您使用 C# 6 编译器运行 MVC5,它也不起作用。

诀窍在于 razor 解析器还不够聪明,无法识别某些语法,因此您必须将整个内容括在括号中(在您的 razor 视图中使用空条件运算符 (?.) 时必须这样做以及)。

也就是说,Razor 中的字符串插值目前在 MVC6 中是 a bit buggy,所以如果它有一些问题我不会感到惊讶。他们是否会得到解决是另一回事。

【讨论】:

  • 啊,宾果游戏,我使用的是 MVC 5。谢谢!
  • MVC 5.2.3 确实有效,您只需为 asp.net 添加 rosyln 代码 dom 包。在非封闭问题中查看此答案:stackoverflow.com/a/31548221/637783
  • 顺便vs更新了错误,现在我说不支持c#6,这样更好
  • 即使在安装了这个更新了 Web.Config 的 NuGet 包之后,我仍然收到以下错误消息作为工具提示:“Feature 'null propagating operator' is not available in C# 5. Please使用语言版本 6 或更高版本。”
  • 我在右键菜单上没有“启用 C# 6 / VB 14”选项。但我在 Visual Studio 的项目菜单中拥有它,所以我从那里启用了它。谢谢。
猜你喜欢
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
相关资源
最近更新 更多