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

时间:2015-01-15 17:06:45

标签: c# asp.net-mvc visual-studio-2015 roslyn c#-6.0

我正在使用C#6.0测试Visual Studio 2015,但语言功能不起作用。在MVC Web应用程序中,以下代码编译:

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

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

  

CS1525:无效的表达术语'。'

如何启用这些功能?

7 个答案:

答案 0 :(得分:203)

这适用于MVC 5(经过测试的5.2.3),你只需要添加roslyn代码dom Nuget包

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

  

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

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

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

答案 1 :(得分:17)

好吧,我有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" 

答案 2 :(得分:15)

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

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

我无法验证这是否也会修复项目属性&gt;构建&gt;高级&gt;语言版本选择 C#6 ,因此您可能需要在菜单中启用C#6后检查此项。

答案 3 :(得分:14)

检查您的项目属性,转到构建,高级并查看C#6.0是否没有默认值。

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

答案 4 :(得分:9)

包括遵循安装最新rat1[6]的建议我还必须将 root 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> ,那应该这样做。

答案 5 :(得分:6)

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

这将事实上将Microsoft.CodeDom.Providers.DotNetCompilerPlatformMicrosoft.Net.Compilers个软件包安装到您的项目中,并将相应的标记添加到web.config文件中。

visual studio 2015 - enable cs6 snipp

答案 6 :(得分:-1)

<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+" />