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

200

我正在了解C# 6.0引入的最新功能,并且刚刚按照自动属性初始化器的示例进行操作。

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

但是我的集成开发环境没有识别这个语法。

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


7
我不相信这在2013年是可能的。相反,可以看看VS 14 CTP或者VS 2015预览版。 - Jeroen Vannevel
2
嗯,我只是想了解微软是否发布了任何更新。 - Hassaan
1
@PauloMorgado,“that version is outdated”中的“that”是指4.5.1、VS2013还是VS2014CTP? - ProfK
Roslyn已不再支持Visual Studio 2013。请访问https://github.com/dotnet/roslyn获取更多信息。 - CAD bloke
2
请问您能否更新这个问题的答案,标记为@Deef? - Chris Marisic
显示剩余4条评论
6个回答

176

在VS2013中,您可以将新编译器安装为nuget package到项目中。这样您就不需要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也是如此。参见https://dev59.com/xF0Z5IYBdhLWcg3w_0d8#30832849。 - Jon Davis
2
它可以工作(即您可以编译),但是VS2013仍然显示错误:https://dev59.com/O5Tfa4cB1Zd3GeqPU7xJ - mnwsmit
2
哈哈哈。这太酷了。编译器提前显示错误,但实际编译时却成功编译。这是一个周末早晨开始的绝妙方式! - RBT
1
尽管构建成功,但它会在代码编辑器窗口中显示错误。只是觉得有必要再次指出。非常好的答案! - meJustAndrew
显示剩余7条评论

64

废弃的预发布软件信息:

根据这篇文章,安装 Visual Studio 2013 中的 C# 6.0 编译器只需要安装一个扩展程序,然后更新 MSBuild 目标文件即可:

实际上,从此版本安装 C# 6.0 编译器只需要安装 Visual Studio 2013 扩展程序,该扩展程序会更新 MSBuild 的目标文件。

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

但您必须知道,那里实现的是过时的规范版本,因为他们不再更新 Visual Studio 2013 的包:

您也可以尝试四月份的终端用户预览版,它可以安装在 Visual Studio 2013 上。 (注意:这个 VS 2013 预览版已经非常过时,不再更新)

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


7
很遗憾,针对 VS 2013 的最终用户预览已经关闭了 :( - Hassaan
4
确认一下,使用VS2013不能用C# 6的支持方式编写代码,是吗?我必须使用VS2015吗? - vorou
2
这是正确的。@vorou,目前没有适用于VS 2013的最新预览版本。 - Patrick Hofman
5
实际上,有一种方法(请看我的回答)。但与几个月前最终版本发布之前你所能做的不同。 - David De Sloovere
1
这个主题以及其他类似的主题中没有任何解决方案能够帮助我。所以我想唯一的解决方法就是转移到VS 2015了。 - Yar
显示剩余4条评论

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,Version = 14.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其任何依赖项。系统找不到指定的文件。请确认声明正确,程序集及其所有依赖项都可用,并且任务包含实现Microsoft.Build.Framework.ITask的公共类。”

更新 发布此答案后我注意到的一件事是,如果您在调试期间更改任何代码(“编辑并继续”),则您可能会发现您的C#6.0代码会突然显示为错误,看起来变回了一个预C#6.0环境。这需要重新启动您的调试会话。对于Web应用程序而言,这非常令人恼火。


@RichBianco 非常好 - 感谢您的反馈和点赞。就我个人而言,我不明白为什么v2.0.1不能工作。如果有人对此有任何线索 - 即消除我报告的错误 - 请发布您的修复方法。 - SteveCinq

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并选择“最新安装”的“Use MSBuild.exe版本”。这样,Resharper将构建您的C# 6.0项目,并且不会将C# 6.0代码下划线为无效。即使我使用Visual Studio 2015,我也在使用此方法,因为:1. Resharper中的单元测试在某些情况下与Visual Studio 2015无法正常工作;2. VS 2015比VS 2013使用更多内存。我把这个方法放在这里,因为我已经寻找了解决方案有一段时间了,也许它能帮助其他人。

-1

1
链接在我使用微软登录后仍然显示“未授权”。当然,在某些情况下,安装VS2015或更高版本可能需要花费数万英镑。 - Chris F Carroll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接