C# 5 不支持'插值字符串'特性,请使用版本6或更高版本。

32

这里有一个类似的问题 链接,但我认为涉及到不同的原因。

我将一个类从一个较新的项目移动到了一个较旧的项目。两个项目的目标都是 .net 4.6,但移动后,在构建时遇到以下错误:

内插字符串 (interpolated strings) 特性在 C# 5 中不可用。请使用版本 6 或更高版本的语言。

我尝试在属性窗口中将项目设置为使用 C# 6 构建,但没有改变。


这是有道理的,因为插值字符串是在6.0中添加的,而你试图在5.0上运行它们。参考:https://msdn.microsoft.com/zh-cn/library/dn961160.aspx?f=255&MSPPError=-2147217396 - Tdorno
@Tdorno:是的,但通常C#6是.NET 4.6项目的默认语言版本。但在这种情况下不是。 - TheColonel26
@TheColonel26 任何项目的默认语言都是“default”。如果要将其设置为C# 5,则必须明确更改。语言版本与您目标的.NET版本无关。 - BJ Myers
@BJ Myers,这是个好消息。不过我正在使用的是VS 2015。项目最初是在2012年创建的,现在看来它仍然设置为版本5是有道理的。 - TheColonel26
对我来说,这个答案解决了问题 https://dev59.com/PFwZ5IYBdhLWcg3wWvRY#36575516 - Richard Lindner
5个回答

23

我最终找到了更改它的地方。似乎有时当你更新目标框架版本时,这个值没有被更改。

在此输入图片描述

3
更改目标框架不应更改语言版本,更改语言版本不应更改目标框架。 - Paulo Morgado
@DanCsharpster,您能详细说明一下吗?您使用的是哪个 .Net Framework 版本?您使用的是哪个 Visual Studio 版本? - TheColonel26
.Net 4.6.1。我将C#版本切换到6,也尝试了7,但都无济于事。我卸载并重新加载了项目,还尝试重新启动Visual Studio,但它仍然会出现相同的错误,即插值字符串在C# 5中不可用。这是一个ASP.NET Web项目,作为更大解决方案的一部分。我需要检查所有我的引用项目吗? - Dan Csharpster
2
答案在这里 https://dev59.com/PFwZ5IYBdhLWcg3wWvRY,你需要添加一个 NuGet 包才能使其工作。 - chrilith
1
不要忘记在调试和发布版本(或“所有配置”)上都进行设置。 - Martin Randall
显示剩余6条评论

22
安装 DotNetCompilerPlatform 版本 2.1.0。

3
我有一个网站而不是Web应用程序,这是解决方案。在另一篇文章中发现,我们可以通过选择网站,然后从菜单中选择网站->启用c#6 / VB 14来添加这些包。 - Esen
1
最新的稳定版本(截至本文写作时为3.6.0)似乎也可以工作。 - derekbaker783

8

它可以轻松适用于VS 2019-.NET Framework 4.8 Web应用程序项目。

安装DotNetCompilerPlatform v3.6后,我意识到了这个问题。

我寻找了TheColonel26的答案,但我无法更改所选语言版本:

高级构建设置-语言版本选择

显然,我们无法更改所选语言版本。(详情请见此处

之后,我使用了kfwbird的答案,但对于更新的版本进行了更改:

 <system.codedom>
     <compilers>
         <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
         <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
     </compilers>
 </system.codedom>

现在它按预期工作。


1
我对这个NuGet包进行了卸载和重新安装;然后不得不关闭视图并重新打开它们;关闭VS可能会做同样的事情。手动添加到Web.config没有起作用。现在要处理其他250多个项目,唉... - Mark Schultheiss
1
@MarkSchultheiss 首先尝试清理项目。也确保你正在使用相同版本的包。现在有更新的版本。可能是你安装了错误的版本。 - bafsar

5

将以下代码添加到你的web.config文件中。如果你已经安装了DotNetCompilerPlatform,这个配置很可能已经被自动添加了。

<system.codedom>
  <compilers>
    <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
    <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
  </compilers>
</system.codedom>

0

GUI不允许我更改版本,但我可以在csproj文件中手动更改。

<LangVersion>5</LangVersion>
变为
<LangVersion>6</LangVersion>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接