Связь между С# 8.0, NET Core 3.0 и Visual Studio

В статье Building С# 8.0 говорится

Текущий план состоит в том, что С# 8.0 будет поставляться одновременно с .NET Core 3.0. Тем не менее, функции начнут оживать с предварительными версиями Visual Studio 2019, над которыми мы работаем.

Какая связь между С# 8.0, NET Core 3.0 и Visual Studio?

Как следствие, я также запутался в том, что новая языковая версия на самом деле с точки зрения физического развертывания. Это новые сборки, развернутые как часть новой установки Visual Studio, или часть сетевой установки sdk core или что-то еще? Нужно ли добавлять С# 8 как в полную среду, так и в .NET Core?

Ответ 1

Обновление после выпуска .NET Core 3

Для некоторых функций, добавленных в С# 8.0, требуется .NET Core 3.0, поэтому они имеют более тесную связь, чем С#/.NET ранее. Пара может быть получена как рабочая нагрузка через VS, но имейте в виду, что С# 8.0 и .NET Core 3.0 не требуют VS; Вы можете использовать их в других IDE.

Документ управления версиями языка С# более подробно описывает отношения язык /.NET.

Некоторые прагматичные подробности вы можете прочитать, как настроить С# 8.0 в Visual Studio.

Старый ответ

Взгляните на обновление версий С# и инструментария С#, которое дает хорошее представление о языке в его отношении к проектам в Visual Studio.

В частности,

В этом сценарии выбрана языковая версия по умолчанию: Предварительный просмотр. Функции С# 8.0, к которым у вас есть доступ, полностью основаны на используемой вами версии компилятора (и, следовательно,.NET SDK). При использовании будущих предварительных просмотров вы можете получить больше (или слегка подправить) функций. При создании проекта .NET SDK выдаст предупреждение о том, что это все еще в предварительном просмотре.

В ответ на

Какова связь между С# 8.0, NET Core 3.0 и Visual Studio?

Взаимосвязь между языком, SDK и версией Visual Studio намного слабее, чем раньше. Язык может развиваться независимо от .NET в любом из его воплощений. Это не значит, что всегда будет правдой. Visual Studio тоже не зависит от языка и фреймворка. Если вы посмотрите на установщик Visual Studio, то увидите, что язык и поддержка .NET - это "рабочие нагрузки", которые можно установить. SDK предоставляет языковые возможности, а VS предлагает инструменты.

Если вы собираетесь использовать VS 2017, посмотрите

Как следствие, меня также смущает вопрос о том, что на самом деле является новой языковой версией с точки зрения физического развертывания

Это SDK, содержащий компилятор, который может создавать сборки из источника С# 8.0.

Это новые сборки, развернутые как часть нового развертывания Visual Studio, или часть сетевой установки sdk core или что-то еще?

Часть SDK, см. выше. Это означает, что в дополнение к вашему коду ничего не "развернуто". Ваш код, независимо от версии, нацелен на версию .NET. Тем не менее, целевая версия .NET должна существовать на компьютере или в контейнере.

Нужно ли добавлять С# 8 как в полную платформу, так и в .NET Core?

Это не "нужно добавлять". Новые версии этой платформы (4.8) и SDK (.NET Core 3.0) поставляются с поддержкой С# 8.0.

Ответ 2

Язык С# содержит спецификацию, а также эталонный компилятор Roslyn.

Версия .Net(4.8 или .net Core 3) представляет собой фреймворк (набор API), который находится поверх управляемой среды выполнения (CLR), которая выполняет скомпилированную программу (на промежуточном языке, тип ассемблерного кода).

Хотя в идеале язык С# был бы независимым от платформы и независимым от платформы и среды выполнения, в истории С# было разработано несколько основных функций языка, где либо текущие версии CLR не допускали эту функцию, либо эта функция была основана на типы более высокого уровня и дополнения фреймворка (например, Async-Await в С# 5 и кортежи значений в определенной степени в С# 7).

В С# 8 языковые функции, такие как асинхронные потоки и диапазоны, требуют новых типов каркаса, которые аналогично не существуют в текущих/более ранних версиях каркасов. Новые элементы интерфейса по умолчанию требуют изменений CLR. Таким образом, эти языковые функции (синтаксис) не будут компилироваться с более ранними версиями Framework и CLR.

В отличие от предыдущих языковых итераций, Microsoft не выпускает эти требования в новой версии .Net Framework 4.8. Вместо этого они выдвигают .Net Core 3.0 в качестве эталонной платформы, что позволяет им потенциально быстрее выполнять итерации.

Что касается Visual Studio, хотя вы могли бы написать код на С# 8 в более ранней версии IDE и скомпилировать его для среды выполнения .Net Core 3.0, вы бы потеряли значительное количество инструментов, простоты и опыта разработчика. Инструменты для подсветки синтаксиса, завершения, исправления кода и т.д. Полагаются на Roslyn, который предоставляет богатые API для анализа кода.

Поскольку развертывание платформы и языка не полностью синхронизировано, предварительные просмотры в Visual Studio предоставляют (в основном) совместимые версии платформы и языка для тестирования новых функций обоих.

Хорошим справочным материалом является раздел "Зависимости платформы" в блоге Building С# 8.0.

Редактировать:

Чтобы ответить на вопрос комментария "Как устанавливается С# 8": языковая спецификация реализована и поставляется в виде компилятора (Roslyn). Пожалуйста, ознакомьтесь с репозиторием Roslyn GitHub, в котором описано, как компилятор собирается, выпускается и устанавливается - с конкретной установкой Visual Studio или без нее.

Ответ 3

Есть два способа заставить С# 8.0 скомпилироваться:

  • Используйте следующую Visual Studio с компилятором Roslyn, который понимает это. (например, Visual Studio 2019)
  • Установите отдельно .NET Core SDK (3.0.0, если доступно) и назовите "сборка dotnet"

Теперь для сборки .NET Core 3.0.0 потребуется установить тот же SDK.

Для сборки .NET 4.8 потребуется установить .NET Full Framework 4.8 SDK.

Оба SDK, вероятно, будут поставляться с Visual Studio 2019, или вам придется установить их позже, чтобы иметь возможность ориентироваться на эти платформы.

Итак: - С# → Roslyn compiler

  • время выполнения → соответствующий SDK

Небольшое дополнение: Глядя на поддержку новых функций в С#, Microsoft явно не сделает .NET Full Framework (4.8 и более поздние версии).NET Standard 2.1 совместимым. Только .NET Core продолжит развиваться в будущем.