C # 6.0与 Visual Studio 2015不兼容的特性

我正在用 C # 6.0测试 Visual Studio 2015,但是语言特性不起作用。在 MVC web 应用程序中,下面的代码可以编译:

if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName))
{
// More logic here...
}

但是,当我通过 Debug 和 IIS Express 运行应用程序时,会得到以下错误:

CS1525: 无效的表达式术语’

如何启用这些特性?

48306 次浏览

检查你的项目属性,去构建,高级,看看是否 C # 6.0如果你没有它作为默认。

目前对 MVC5和 C # 6.0有完美的支持,并且运行得非常好!

这个工作在 MVC 5(测试5.2.3) ,你只需要添加 Roslyn 代码 Dom Nuget 包

用于.NET 编译器的 CodeDOM 提供程序..。

使用新的。NET 编译器平台(“ Roslyn”)编译器作为服务 API。这为使用 CodeDOM 的系统(例如 ASP.NET 运行时编译)提供了对新语言特性的支持,并提高了这些系统的编译性能。

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Https://www.nuget.org/packages/microsoft。 CodeDom。提供商

嗯,我有 MVC5和最近安装 VS 2015。

我已经安装了 CodeDOM 提供程序包,但它没有帮助..。 但是在那之后我意识到,这个软件包只支持框架4.5,而我在测试期间将目标框架设置为4.6——尽管它可以与4.5一起工作... ..。

所以也要注意目标框架。如果你有4.5-只要安装软件包微软。密码。供应商。DotNetCompilerPlatform.但是如果你的目标是4.5.1-4.6,那么你必须在 web.config 部分进行修改

  <system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
<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>

对于 C # ,只需将 类型改为:

type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

包括下面的建议,安装最新的 Microsoft.CodeDom.Providers.DotNetCompilerPlatform我也必须设置我的 Web.config system.codedom这最终得到所有的错误在 Visual Studio 2015消失:

  <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>

现在重新启动 Visual Studio,应该就可以了。

Visual Studio 2015还将在 Project 菜单中显示 Enable C#6 / VB 14,并选择 ASP.NET 网站/Web 应用程序。

这实际上会将 Microsoft.CodeDom.Providers.DotNetCompilerPlatformMicrosoft.Net.Compilers包安装到您的项目中,并将适当的标记添加到 web.config 文件中。

visual studio 2015 - enable cs6 snipp

我在 VisualStudio2015中也遇到过同样的问题。这里的另一个答案提到了我使用的解决方案,但是他们错误地指定了修复程序,而且从未进行说明。

在 VisualStudio 菜单上,选择 工程项目,如果遇到此问题,应该会看到子项 启用 C # 6/VB 14。选择此菜单子项。它将从 Nuget 下载正确的软件包并安装它们。此后,重新启动 VisualStudio 并重新加载解决方案。

我无法验证这是否也将修复 项目属性 > 建立 > 高级 > 语言版本选择到 C # 6,所以您可能想在从菜单启用 C # 6之后检查这一点。

<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7 /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.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:15 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />