C# 6.0 功能不适用于 Visual Studio 2015

C# 6.0 Features Not Working with Visual Studio 2015

我正在使用 C# 6.0 测试 Visual Studio 2015,但语言功能无法正常工作。在 MVC web 应用程序中,以下代码会编译:

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

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

CS1525: Invalid expression term '.'

如何启用这些功能?

检查您的项目属性,转到构建、高级并查看是否有 C# 6.0(如果您没有默认设置)。

目前完美支持 MVC5 和 C# 6.0,效果非常好!

这适用于 MVC 5(已测试 5.2.3),您只需添加 roslyn 代码 dom Nuget 包

.NET 编译器的 CodeDOM 提供程序...

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.

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

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

好吧,我有 MVC5 并且最近安装了 VS 2015。

我已经安装了 CodeDOM 提供程序包,但没有帮助... 但在那之后我意识到,该软件包仅支持框架 4.5,而我在测试期间将目标框架设置为 4.6 - 尽管它适用于 4.5...

所以还要注意目标框架。如果你有 4.5 - 只需安装包 Microsoft.CodeDom.Providers.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 我还必须将我的 root 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 还将在“项目”菜单中显示 Enable C#6 / VB 14,并选择了 ASP.NET 网站/Web 应用程序。

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

我在 Visual Studio 2015 年遇到了同样的问题。这里的另一个答案提到了我使用的解决方案,但他们错误地指定了修复方法并且从未给出澄清。

在 Visual Studio 菜单中,select 项目 你应该会看到子项 Enable C#6 / VB 14 如果你有这个问题。 Select 这个菜单子项。它将从 Nuget 下载正确的包并安装它们。在此之后,重新启动 Visual Studio 并重新加载您的解决方案。

我无法验证这是否也会将 项目属性 > 构建 > 高级 > 语言版本 selection 修复为 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+" />