Работает ли С# 7.0 для .NET 4.5?

Я создал проект в Visual Studio 2017 RC, чтобы проверить, могу ли я использовать новые языковые функции С# 7.0 в проекте .NET Framework 4.5. Мне кажется, что после ссылки System.ValueTuple NuGet новые кортежи работают нормально. Есть ли что-нибудь еще, о чем я должен думать, или это будет работать?

После проверки System.ValueTuple зависимостей NuGet, похоже, что .NET Framework 4.0 не поддерживается. Это так, или есть способ сделать работу с новым языком в этой среде выполнения?

Ответ 1

Пропустите функции, новые в С# 7.0:

  • Кортежи: Пакет System.ValueTuple имеет версию для профиля portable-net40+sl4+win8+wp8. Это означает, что он может использоваться на .Net 4.0. (Не знаю, почему только список зависимостей .Net 4.5.)

    Если вы хотите использовать кортежи в более низких версиях .Net, он все равно должен работать, пока вы добавляете код для ValueTuple и связанных с ними в ваш проект.

  • out переменные, сопоставление шаблонов, локальные функции, более выраженные члены, выражения throw, улучшения синтаксиса числовых литералов: все эти функции - это просто синтаксический сахар, поэтому им не нужны новые возможности из рамки.

  • ref locals и возвращает: эта функция предоставляет на С# то, что поддерживает фреймворк с самого начала, поэтому здесь не требуется никаких изменений в структуре.

  • Обобщенные типы возврата async: для использования этой функции вам нужен тип с атрибутом AsyncMethodBuilder, который находится в System.Threading.Tasks.Extensions пакет (наряду с одним таким типом, ValueTask<T>). Этот пакет поддерживается только на .Net 4.5, поэтому для .Net 4.0 вам нужно будет самостоятельно компилировать соответствующие типы. (Использование await в .Net 4.0 также требует Microsoft.Bcl.Async, но ничего нового.)

Подводя итог: все С# 7.0 должны работать с .Net 4.5 после установки необходимых пакетов, и большая часть из них должна работать и с .Net 4.0.

Ответ 2

Запуск скомпилированного приложения С# 7 на .NET 4.5 должно быть прекрасным в данный момент, но обратите внимание, что запуск приложений ASP.NET, использующих динамическую компиляцию ASP.NET, не будет работать на .NET 4.5, потому что требуется компилятор С# 7.0.NET 4.6 для запуска.

Источник: https://github.com/dotnet/roslyn/issues/17908:

Для компилятора С# 7.0 (2.0 и выше) требуется .NET 4.6 для запуска

Информация о https://www.nuget.org/packages/Microsoft.Net.Compilers/2.0.1 (о поддержке .NET 4.5) кажется устаревшей.