Выражение функции get/set accessors в С# 7.0

У меня есть этот код в классе

private string test;
public string Test
{
    get =>  test;
    set => test = value;
}

Но компилятор не позволит мне скомпилировать. В нем говорится:

CS1043 { or ; expected 
CS1513 } expected

Я использую VS 2017 и настраиваю .NET FW 4.6 с проектом MVC 5

Любая идея, почему она не работает?

Ответ 1

Вы должны установить компилятор в версию 7 в проекте.

Свойства проекта → (вкладка) Сборка → Дополнительно → Языковая версия = С# 7.0

UPDATE BY @gsharp

проверьте также свою (NuGet) ссылку на платформу .NET Compiler Microsoft.Net.Compilers.

Ответ 2

У меня была та же проблема. Я сравнил свой проект с другим проектом, который был в порядке, и нашел эту строку из .csproj в результате проблемы.

<Import Project="$(MSBuildToolsPath)\Workflow.Targets" />

Ответ 3

Ответ , отмеченный выше, является для меня рабочим решением. Я не мог добавить комментарии с моими текущими баллами, но я подумал о том, чтобы поделиться немного больше информации для тех, кто может найти похожую ситуацию, как я.

В моем случае мы используем сборки Teamcity для запуска решения, и оно работало (шаг MS Build) с использованием Microsoft Visual Studio 2015. К счастью, у нас также есть Microsoft Visual Studio 2017 в разделе Visual Studio на этапе сборки. Я выбрал 2017 год, и он прошел успешно.

Для тех, кто использует TeamCity или Jenkins или аналогичные, в первую очередь убедитесь, что на вашем инструменте настроена последняя версия сборки MS/VS, например 2017 или 2019 (будет самой последней). Если нет, сначала получите это, а затем укажите на эту версию.

Там еще один взлом/вариант. Такие инструменты, как JEnkins, Teamcity также могут иметь шаг для установки нюгетов, и этот пост также может помочь установить это.