如何在Visual Studio 2013中启用C#6.0功能?


201

我正在浏览C#6.0中引入的最新功能,并跟随了一个自动属性初始化程序的示例,

class NewSample
{
    public Guid Id { get; } = Guid.NewGuid();
}

但是我的IDE无法识别语法。

我想知道如何在Visual Studio 2013中启用C#6.0。我使用的目标框架是4.5.1。


7
我认为2013年是不可能的。请改用VS 14 CTP或VS 2015预览版。
Jeroen Vannevel 2014年

好吧,您需要的是最新的编译器,它不是VS 2013的一部分,所以我认为这是不可能的。
Rufus L

2
好吧,我只是想知道ms是否发布任何更新
Hassaan 2014年

1
@PauloMorgado“那个版本已过时”是什么意思?4.5.1,VS2013或VS2014CTP?
ProfK 2014年

2
您能否将此问题的答案更新为@Deef
Chris Marisic

Answers:


64

已过时的预发行软件的信息:

据此,只是Visual Studio 2013的安装和升级:

实际上,从此版本安装C#6.0编译器仅涉及安装Visual Studio 2013扩展,而后者又会更新MSBuild目标文件。

因此,只需从https://github.com/dotnet/roslyn获取文件,即可开始使用。

您必须知道它是在此处实现的规范的过时版本,因为它们不再更新Visual Studio 2013的软件包

您还可以尝试安装在Visual Studio 2013之上的April的最终用户预览。(注意:此VS 2013预览已过时,并且不再更新)

因此,如果您想使用最新版本,则必须下载Visual Studio 2015


7
不幸的是,vs 2013的最终用户预览已关闭:(
Hassaan 2014年

4
只是为了确保没有使用VS 2013的C#6编写方法的支持?我必须使用VS 2015吗?
2015年

2
那是正确的。@vorou没有VS 2013的最新预览版。–
Patrick Hofman

5
实际上,这是一种方法(请参阅我的回答)。但这与您几个月前发布最终版本之前可以执行的操作不同。
David De Sloovere

1
这个主题或其他类似主题中的解决方案都没有帮助我。因此,我认为唯一的解决方法是迁移到VS 2015。
2016年

177

在VS2013下,您可以将新的编译器作为nuget软件包安装到项目中。这样,您就不需要VS2015或更新的构建服务器。

https://www.nuget.org/packages/Microsoft.Net.Compilers/

Install-Package Microsoft.Net.Compilers

该软件包允许您使用/构建C#6.0代码/语法。由于VS2013本身无法识别新的C#6.0语法,因此尽管构建良好它也会在代码编辑器窗口中显示错误

使用Resharper,您将获得C#6功能的弯曲线条,但是灯泡为您提供了“对该项目启用C#6.0支持”(设置保存为.DotSettings)的选项。

如@ stimpy77所述:要获得MVC Razor视图的支持,您将需要一个额外的程序包(对于那些不阅读注释的程序)

Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

如果要全面的C#6.0支持,则需要安装VS2015。


8
实际上,主要构造函数已从最终版本中删除。这就是为什么它们不起作用。
Mark A. Donohoe

8
只是想指出一个想要在MVC5项目中的Razor中使用C#6的人,这似乎是一个单独的NuGet包,即使您使用的是VS2015,它也是必需的。参见stackoverflow.com/a/30832849/11398
乔恩·戴维斯

2
它可以工作(如您可以进行编译),但是VS2013仍然显示错误:stackoverflow.com/questions/35796001/…–
mnwsmit

2
他他他。太酷了 编译器会提前显示错误,但在实际编译时会成功编译。一个周末早晨开始真是太可笑了!
RBT

1
尽管它可以正常运行,但它将在代码编辑器窗口中显示错误。只是觉得有必要再次指出这一点。好答案!
meJustAndrew

5

Roslyn(开源.NET C#和VB编译器)迁移到.NET 4.6 之前,已经写了很多答案。因此,如果您的项目像我的那样(例如,继承且无法更改)以4.5.2为目标,那么他们将无济于事。

但是您可以从https://www.nuget.org/packages/Microsoft.Net.Compilers获取Roslyn的早期版本,然后安装该版本而不是最新版本。我用的是1.3.2。(我尝试使用2.0.1-它似乎是在.NET 4.5上运行的最后一个版本-但我无法对其进行编译*。)从VS 2013的程序包管理器控制台中运行此命令:

PM> Install-Package Microsoft.Net.Compilers -Version 1.3.2

然后重新启动Visual Studio。最初我有几个问题;您需要将C#版本设置回默认值(C#6.0没有出现在版本列表中,但似乎已设为默认值),然后清理,保存,重新启动VS并重新编译。

有趣的是,由于代码中使用了C#6.0功能,所以我没有出现任何IntelliSense错误(这就是首先要使用C#6.0的原因)。

*版本2.0.1引发错误“无法从程序集Microsoft.Build.Tasks.CodeAnalysis.dll加载“ Microsoft.CodeAnalysis.BuildTasks.Csc任务。无法加载文件或程序集'Microsoft.Build.Utilities.Core,版本= 14.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。系统找不到指定的文件。请确认声明正确无误,并且程序集及其所有依赖项均可用,并且任务包含一个实现Microsoft.Build.Framework.ITask的公共类。

更新自发布此答案以来,我注意到的一件事是,如果您在调试过程中更改了任何代码(“编辑并继续”),您会发现C#6.0代码突然显示为错误,似乎恢复为C#6.0之前的环境。这需要重新启动调试会话。非常烦人,尤其是对于Web应用程序。


@RichBianco太好了-感谢您的反馈和支持。就个人而言,我不明白为什么v2.0.1无法正常工作。如果有人对此有任何线索-如摆脱我报告的错误-请发布您的修复程序。
SteveCinq '18年

4

值得一提的是,在以下情况下,VS 2015用户构建时间将增加

Install-Package Microsoft.Net.Compilers

那些使用VS 2015且必须在项目中保留此软件包的用户可以解决增加的构建时间问题

编辑文件packages\Microsoft.Net.Compilers.1.2.2\build\Microsoft.Net.Compilers.props并清理。该文件应如下所示:

<Project DefaultTargets="Build" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

这样做会强制在添加Microsoft.Net.Compilers包之前按原样构建项目


2

如果您具有Resharper,则可以在Visual Studio 2013中使用完整的C#6.0功能。
您必须启用Resharper Build和voilá!在Resharper选项->构建中,启用Resharper构建,然后在“使用MSBuild.exe版本”中选择“最新安装”。

通过这种方式,Resharper将构建您的C#6.0项目,并且也不会在C#6.0代码中强调无效。

尽管我拥有Visual Studio 2015,但我也正在使用它,因为:

  1. 由于某种原因,Resharper中的单元测试不适用于Visual Studio 2015
  2. VS 2015比VS 2013使用更多的内存。

我将其放在这里,因为我一段时间以来一直在寻找解决此问题的方法,也许它将对其他人有所帮助。


-1

似乎有些误会。因此,与其尝试打补丁VS2013,不如从微软那里得到答案:https ://social.msdn.microsoft.com/Forums/vstudio/en-US/49ba9a67-d26a-4b21-80ef-caeb081b878e/will-c- 截止到2013年有60位支持者?forum = roslyn

因此,请阅读并安装VS2015。


1
即使在ms登录后,该链接也会给我​​“未授权”的信息。当然,在某些设置中,安装VS2015或更高版本的费用为XXX,000英镑。
克里斯·卡罗尔
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.