如何在 Visual Studio 2013 中启用 C# 6.0 功能?
Posted
技术标签:
【中文标题】如何在 Visual Studio 2013 中启用 C# 6.0 功能?【英文标题】:How to enable C# 6.0 feature in Visual Studio 2013? 【发布时间】:2015-01-21 12:28:59 【问题描述】:我正在浏览 C# 6.0 中引入的最新功能,并且只是遵循了自动属性初始化器的示例,
class NewSample
public Guid Id get; = Guid.NewGuid();
但我的 IDE 无法识别语法。
我想知道如何在 Visual Studio 2013 中启用 C# 6.0。我使用的目标框架是 4.5.1。
【问题讨论】:
我不相信这在 2013 年是可能的。请查看 VS 14 CTP 或 VS 2015 预览版。 嗯,你需要最新的编译器,它不是 VS 2013 的一部分,所以我认为这是不可能的。 好吧,我只是想看看ms是否发布了任何更新 @PauloMorgado 在“那个版本已经过时”中“那个”是什么意思? 4.5.1,VS2013,还是VS2014CTP? 你能否将这个问题的答案更新为@Deef 【参考方案1】:在 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 视图,您需要一个额外的package(对于那些不阅读cmets 的人)
Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
如果你想要完整的 C# 6.0 支持,你需要安装 VS2015。
【讨论】:
主构造函数实际上已从最终版本中删除。这就是它们不起作用的原因。 只是想指出任何想要在 MVC5 项目中在 Razor 中使用 C#6 的人,看起来这是一个单独的 NuGet 包,即使您使用的是 VS2015 也是必需的。见***.com/a/30832849/11398 它可以工作(你可以编译),但是 VS2013 仍然显示错误:***.com/questions/35796001/… 嘿嘿嘿。这很酷。编译器提前显示错误,但实际编译时编译成功。周末早上的开始真是太棒了! 它会在代码编辑器窗口中显示错误,尽管它会构建得很好。 只是觉得有必要再次指出它。很好的答案!【参考方案2】:过时的预发布软件信息:
根据this,这只是 Visual Studio 2013 的安装和使用:
事实上,从这个版本安装 C# 6.0 编译器只需要安装一个 Visual Studio 2013 扩展,这反过来会更新 MSBuild 目标文件。
所以只需从https://github.com/dotnet/roslyn 获取文件,您就可以开始了。
您必须知道它是那里实施的规范的过时版本,因为它们不再更新 Visual Studio 2013 的包:
您还可以尝试安装在 Visual Studio 2013 之上的 4 月的最终用户预览版。 (注意:这个 VS 2013 预览版已经过时了,不再更新)
所以如果你确实想使用最新版本,你必须下载Visual Studio 2015。
【讨论】:
很遗憾,vs 2013 的最终用户预览版已经关闭:( 只是为了确保没有支持使用 VS 2013 在 C# 6 中编写的方法?我必须使用 VS 2015 吗? 没错。 @vorou 没有最新版本的 VS 2013 预览版。 其实这是一种方式(见我的回答)。但这与几个月前在最终版本发布之前所做的不同。 本主题或其他类似主题中的解决方案都没有帮助我。所以我猜唯一的解决方法是迁移到 VS 2015。【参考方案3】:这里的很多答案都是在 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# 版本设置回 default(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 不起作用。如果有人对此有任何线索 - 例如,摆脱我报告的错误 - 请发布您的修复。【参考方案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
包之前的状态构建项目
【讨论】:
【参考方案5】:如果您有 Resharper,则可以在 Visual Studio 2013 中使用完整的 C# 6.0 功能。 您必须启用 Resharper Build 和瞧! 在 Resharper 选项 -> 构建 - 启用 Resharper 构建并在“使用 MSBuild.exe 版本”中选择“最新安装”
这样,Resharper 将构建您的 C# 6.0 项目,并且也不会在 C# 6.0 代码下划线为无效。
虽然我有 Visual Studio 2015,但我也在使用它,因为:
-
由于某种原因,Resharper 中的单元测试不适用于 Visual Studio 2015
VS 2015 使用比 VS 2013 更多的内存。
我把它放在这里,因为我一直在寻找这个问题的解决方案,也许它会帮助其他人。
【讨论】:
【参考方案6】:好像有什么误会。因此,与其尝试修补 VS2013,不如从微软的人那里得到答案:https://social.msdn.microsoft.com/Forums/vstudio/en-US/49ba9a67-d26a-4b21-80ef-caeb081b878e/will-c-60-ever-be-supported-by-vs-2013?forum=roslyn
所以,请阅读并安装 VS2015。
【讨论】:
即使在 ms 登录后,该链接也会给我“未授权”。当然,在某些设置下,安装 VS2015 或更高版本的费用是 XXX,000 英镑。以上是关于如何在 Visual Studio 2013 中启用 C# 6.0 功能?的主要内容,如果未能解决你的问题,请参考以下文章
如何设置 TFS 2013 以使用 Visual Studio 2013 或 Visual Studio 2017 构建
visual studio 2013 wpf 添加窗口加载和关闭函数
如何在 Visual Studio 2013 中使用 NuGet 3.0?