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

Chr*_*uer 134 c# asp.net-mvc roslyn c#-6.0 visual-studio-2015

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

if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName))
{
    // More logic here...
}
Run Code Online (Sandbox Code Playgroud)

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

CS1525:无效的表达式术语'.'

如何启用这些功能?

jbt*_*ule 205

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

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

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

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Run Code Online (Sandbox Code Playgroud)

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

  • 值得一提的是重启Visual Studio.我安装包后一直抱怨,但重新启动使它消失了:) (19认同)
  • 这应该作为答案提交,因为它解决了问题而不必升级到MVC的beta版本. (4认同)
  • @Deef你错了.*Microsoft.Net.Compilers*与Msbuild相关.*CodeDOM Providers*与ASP.NET和其他在运行时编译的api相关. (3认同)

小智 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>
Run Code Online (Sandbox Code Playgroud)

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

type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
Run Code Online (Sandbox Code Playgroud)


小智 16

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

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

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

  • 这是一个比接受的答案更容易的解决方案. (2认同)
  • 该子项目不在我的项目菜单中。我有Unity 5.5.2,可以打开VS 2015社区来创建一些脚本。将默认值添加到属性后,由红色的下划线显示一个编译器错误,指出我需要C#6,因为当前已加载C#v.4。每当我尝试选择项目的属性时,屏幕只会闪烁,但不会出现任何页面。 (2认同)

Bar*_*xto 15

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

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

  • "功能'空传播运算符'在C#5中不可用.请使用语言版本6或更高版本." 我不知道高级设置,但似乎没有在这里工作. (18认同)
  • 如何将默认版本更改为6,以便我不必在每个项目上设置它? (3认同)
  • 定义"一些".这在vs 2015更新3中不起作用. (3认同)

Ser*_*gan 9

包括遵循安装最新的建议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>
Run Code Online (Sandbox Code Playgroud)

现在重启Visual Studio,应该这样做.


Mic*_*ada 6

Visual Studio 2015还将Enable C#6 / VB 14在"项目"菜单中显示一个选定的ASP.NET网站/ Web应用程序.

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

visual studio 2015  - 启用cs6 snipp