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


135

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

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

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

CS1525:无效的表达式术语“。”

如何启用这些功能?


1
这听起来像是特定于MVC的(或者至少是特定于ASP.NET的),所以我添加了一个标签-因为Visual Studio本身清楚地了解C#6 ...无论在哪个版本中,您都应该查看MVC的配置.NET的目标对象...可能有一些东西可以让您指定要使用的编译器。
乔恩·斯基特

也许您需要在web.config中compiler为roslyn代码提供者msdn.microsoft.com/en-us/library/y9x69bzw(v=vs.110).aspx添加元素?
rene 2015年

此代码在aspx页面或Razor页面中吗?或.cs文件中的代码?
Erik Funkenbusch 2015年

@ErikFunkenbusch在Razor页面中。
克里斯·希夫豪尔

1
是的,MVC5与Roslyn不兼容
Erik Funkenbusch

Answers:


209

这在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/


4
这应该作为答案提交,因为它可以解决问题,而不必升级到MVC的beta版。
丹尼尔·欧根

3
@Deef,您不正确。该Microsoft.Net.Compilers有关的MSBuild。在CodeDOM的供应商是与ASP.NET和其他的API是编译在运行时。
jbtule

1
是啊,你说得对。我误读/误解了,因为它们有时会用新名称重新打包软件包,而只是将它们添加为依赖项。
David De Sloovere

21
重新启动Visual Studio可能值得一提。我安装了软件包后,它一直在抱怨,但是重新启动却使它消失了:)
Siewers

1
@Rono,确保您的软件包来源是nuget.org。正如您从链接中看到的那样,它是正确的名称,并且该程序包存在。
jbtule 2015年

17

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

我已经安装了CodeDOM provider程序包,但是并没有帮助...但是后来我意识到,该程序包仅支持框架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" 

这当然可以帮助我C# 6开始工作ASP.NET 4.6,但是最好将代码正确地发布在type那里……
Serj Sagan

谢谢,这在我星期二回家时一直有效,然后在星期四回来时不起作用。不知何故,配置的这一部分已经消失了,因为我记得当我最初使它工作时看到了它!
卡尔,

16

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

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

我无法验证这是否还会将“ 项目属性”>“构建”>“高级”>“语言版本”选择固定为C#6,因此在从菜单启用C#6后,您可能也要进行检查。


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

15

检查项目属性,进行构建,高级,如果没有默认C#6.0,请查看是否有C#6.0。

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


18
“功能'null传播运算符'在C#5中不可用。请使用语言版本6或更高版本。” 不了解“高级”设置,但似乎在这里不起作用。
juFo 2015年

3
您如何将默认版本更改为6,这样我就不必在每个项目中都设置它了?
Mir

3
定义“一些”。这不工作在2015年VS更新3
罗伯特伊万茨

1
当我获得项目属性时,没有构建菜单。如果我转到“属性页”,则会得到一个构建菜单,但是构建屏幕上没有“高级”按钮。翻译,“这不起作用”(对我来说)
Malcolm Anderson

我的VS版本是Community 2015 Update 3(14.0.25431.01)
Malcolm Anderson

10

包括遵循安装最新版本的建议在内,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,应该这样做。


6

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

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

Visual Studio 2015-启用CS6片段


1
什么网站标签?如果您的意思是“属性/网站”,则没有此功能。
罗伯特·伊万克

1
在Visual Studio中,当您选择某些WebSite项目时,“网站”选项卡将出现在“视图”选项卡旁边。在那里您可能会发现此功能。
MichalŠuvada16年

1
我目前已投票,请编辑以澄清您的意思,例如添加屏幕截图。
user247702 '16

我正在尝试解决网站问题,并且该菜单项对我不可用。请注意,使用VB 14功能,同一解决方案中的其他非Web项目也没有问题。它们都针对.NET 4.7,我安装了CodeDom编译器。
安德鲁·S

-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+" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.