c#7.0中的表达式体get/set访问器功能

c#7.0中的表达式体get/set访问器功能,c#,.net,c#-7.0,C#,.net,C# 7.0,我在课堂上有这个代码 private string test; public string Test { get => test; set => test = value; } 但是编译器不让我编译。上面说 CS1043 { or ; expected CS1513 } expected 我正在使用VS2017,并将.NET FW 4.6作为MVC 5项目的目标 知道它为什么不工作吗?您必须在项目中将编译器设置为版本7 项目属性→ (选项卡)构建→ 先进的→

我在课堂上有这个代码

private string test;
public string Test
{
    get =>  test;
    set => test = value;
}
但是编译器不让我编译。上面说

CS1043 { or ; expected 
CS1513 } expected
我正在使用VS2017,并将.NET FW 4.6作为MVC 5项目的目标


知道它为什么不工作吗?

您必须在项目中将编译器设置为版本7

项目属性→ (选项卡)构建→ 先进的→ 语言版本=C#7.0

@gsharp更新


同时检查您对.NET编译器平台的(NuGet)引用
Microsoft.NET.Compilers

我也遇到了同样的问题。我将我的项目与另一个还行的项目进行了比较,发现.csproj中的这一行导致了问题

这是我的工作解决方案。我无法就我目前的观点发表评论,但我想为其他可能发现类似情况的人分享更多信息

在我的例子中,我们正在使用Teamcity构建来运行解决方案,并且它正在使用Microsoft Visual Studio 2015运行(MS构建步骤)。幸运的是,在构建步骤的VisualStudio部分中也有Microsoft Visual studio 2017。我选择了2017年,它成功运行

对于使用TeamCity或Jenkins或类似工具的任何人,首先要确保您的工具是否配置了最新的MS build/VS build版本,如2017年或2019年(最新版本)。如果没有,请先获取该版本,然后指向该版本


还有另一个黑客/选项。像JEnkins这样的工具,Teamcity也可以有一个步骤来安装Nuget,并且可能也有助于实现这一点

对于现有项目,您必须手动将C语言版本更改为7。谢谢您的回答。这个问题发生在工作中的一个项目中,现在我在家,无法评估它。我试着在家里复制它。2015年启动项目,2017年开通。你猜怎么着?成功了。然后我将语言版本更改为6.0,在这里我得到了一个正确的编译错误“功能在c#6使用7中不可用”。迫不及待地想在周二回去工作:)真奇怪——我没有为我的任何一个人做过这件事。我的所有项目都设置为“默认”语言版本,并在升级到2017年后立即使用C#7.0。在我的情况下,.NET编译器平台引用的“旧”版本导致了问题。