VS2017 - C#7 语言功能在 MVC 视图中不起作用
VS2017 - C#7 language features not working in MVC views
在 .cshtml 视图中使用内插字符串会产生以下智能感知错误:Feature 'interpolated strings' is not used in C#5. Please use language version 6 or greater.
此功能和其他 C#7 语言功能在编译代码(.cs 文件)中有效。
如下所示,最新的主要版本是 C#7。
根据中的评论,"default"表示"latest major version"。
那么为什么会出错呢?另外,为什么它不显示 "Latest Major Version" 和 "Latest Minor Version" 作为单独的列表选项,正如我在许多在线示例中看到的那样?
更新:
我终于通过安装 CodeDom providers package(Microsoft.Net.Compilers 包与 Msbuild 相关。CodeDOM Providers 包与 ASP.NET 和其他在运行时编译的 api,因此如果未安装它,即使为 msbuild 选择了最新的语言版本,cshtml 文件也会显示错误)。这会自动将以下内容添加到我的 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.7.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.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
参考:
我相信升级到 MVC6 也会修复它。
我怀疑你的问题的关键在于你说 "in a view"。假设这是在 ASP.Net 的上下文中,您应该查看您的 web.config,它可能指定它自己的 LangVersion 设置(在您的情况下可能硬编码为 5)。
有关配置 ASP.Net 以使用更新版本的 C# 的更多详细信息,请参见此 Roslyn documentation issue。
在 .cshtml 视图中使用内插字符串会产生以下智能感知错误:Feature 'interpolated strings' is not used in C#5. Please use language version 6 or greater.
此功能和其他 C#7 语言功能在编译代码(.cs 文件)中有效。
如下所示,最新的主要版本是 C#7。
根据
那么为什么会出错呢?另外,为什么它不显示 "Latest Major Version" 和 "Latest Minor Version" 作为单独的列表选项,正如我在许多在线示例中看到的那样?
更新:
我终于通过安装 CodeDom providers package(Microsoft.Net.Compilers 包与 Msbuild 相关。CodeDOM Providers 包与 ASP.NET 和其他在运行时编译的 api,因此如果未安装它,即使为 msbuild 选择了最新的语言版本,cshtml 文件也会显示错误)。这会自动将以下内容添加到我的 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.7.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.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
参考:
我相信升级到 MVC6 也会修复它。
我怀疑你的问题的关键在于你说 "in a view"。假设这是在 ASP.Net 的上下文中,您应该查看您的 web.config,它可能指定它自己的 LangVersion 设置(在您的情况下可能硬编码为 5)。
有关配置 ASP.Net 以使用更新版本的 C# 的更多详细信息,请参见此 Roslyn documentation issue。