Подтвердить что ты не робот

Строковая интерполяция не работает с .NET Framework 4.6

Я только что установил .NET Framework 4.6 на свой компьютер, а затем создал приложение ConsoleApplication с платформой .NET Framework 4.6 с Visual Studio 2013.

Я написал следующее в методе Main:

  string test = "Hello";
  string format = $"{test} world!";

Но это не компилируется. Выполнение этого же в Visual Studio 2015 работает.
Почему?

4b9b3361

Ответ 1

Интерполяция строк - это функция С# 6.0, а не одна из .NET Framework 4.6. VS 2013 не поддерживает С# 6, но VS 2015 делает.

Ответ 2

Интерполяция строк действительно является функцией С# 6.0, но С# 6 не ограничивается VS2015.

Вы можете скомпилировать приложения, которые используют возможности языка С# 6.0 в VS2013, путем таргетинга на платформу компилятора Roslyn через пакет Microsoft.Net.Compilers NuGet.

Мой опыт заключается в том, что после установки этого пакета сообщения об ошибках во время компиляции могут немного вводить в заблуждение. Если у вас есть ошибки компиляции, не связанные с С# 6, вам будут показаны эти сообщения об ошибках плюс сообщения об ошибках относительно недействительного синтаксиса, относящиеся к любым функциям С# 6, которые вы использовали, несмотря на то, что теперь вы нацеливаете на компилятор, который их поддерживает.

Например...

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Title = "Home Page";
        var example = $"{ViewBag.Title}";
        ImASyntaxErrorWhatAmIWheresMySemicolonLOL
        return View();
    }
} 

приведет к 4 сообщениям об ошибках во время компиляции:

Ошибка 1 Неожиданный символ '$'

Ошибка 2 Недопустимый термин выражения ''

Ошибка 3; Ожидается,

Ошибка 4; Ожидается,

Первые 3 ошибки здесь относятся к строке, которая использует интерполяцию строк, только последняя ошибка ; expected является проблемой. Удалите строку нарушения прямо перед тем, как мы вернем View, и ошибки компиляции строки интерполяции исчезнут, и все будет хорошо.