Связь между C# 8.0, NET Core 3.0 и Visual Studio
В статье Building C# 8.0 говорится
Текущий план состоит в том, что C# 8.0 будет поставляться одновременно с.NET Core 3.0. Тем не менее, функции начнут оживать с предварительными версиями Visual Studio 2019, над которыми мы работаем.
Какая связь между C# 8.0, NET Core 3.0 и Visual Studio?
Как следствие, я также запутался в том, что новая языковая версия на самом деле с точки зрения физического развертывания. Это новые сборки, развернутые как часть новой установки Visual Studio, или часть сетевой установки sdk core или что-то еще? Нужно ли добавлять C# 8 как в полную среду, так и в.NET Core?
3 ответа
Взгляните на обновление версий C# и инструментария C#, которое дает хорошее представление о языке в том, что касается проектов в Visual Studio.
Особенно,
Версия языка по умолчанию, выбранная в этом сценарии, является Предварительным просмотром. Функции C# 8.0, к которым у вас есть доступ, полностью основаны на используемой вами версии компилятора (и, следовательно,.NET SDK). При использовании будущих предварительных просмотров вы можете получить больше (или слегка подправить) функций. Когда вы создаете проект,.NET SDK выдаст предупреждение, что это все еще в предварительном просмотре.
В ответ на
Какая связь между C# 8.0, NET Core 3.0 и Visual Studio?
Взаимосвязь между языком, SDK и версией Visual Studio намного слабее, чем раньше. Язык может развиваться независимо от.NET в любом из его воплощений. Это не значит, что это всегда будет правдой. Visual Studio тоже не зависит от языка и фреймворка. Если вы посмотрите на установщик Visual Studio, то увидите, что язык и поддержка.NET - это "рабочие нагрузки", которые можно установить. SDK предоставляет языковые возможности, а VS предлагает инструментарий.
Если вы собираетесь с VS 2017 на данный момент, взгляните на
Как следствие, я также запутался в том, что новая языковая версия на самом деле с точки зрения физического развертывания
Это SDK, который содержит компилятор, который может создавать сборки из источника C# 8.0.
Это новые сборки, развернутые как часть новой установки Visual Studio, или часть сетевой установки sdk core или что-то еще?
Часть SDK, см. Выше. Это означает, что в дополнение к вашему коду ничего не "развернуто". Ваш код, независимо от версии, нацелен на версию.NET. Тем не менее, целевая версия.NET должна существовать на компьютере или в контейнере.
Нужно ли добавлять C# 8 как в полную среду, так и в.NET Core?
Это не "нужно добавлять". Новые версии этой платформы (4.8) и SDK (.NET Core 3.0) поставляются с поддержкой C# 8.0.
Язык C# содержит спецификацию, а также эталонный компилятор Roslyn.
Версия.Net (4.8 или.net Core 3) представляет собой фреймворк (набор API), который находится поверх управляемой среды выполнения (CLR), которая выполняет скомпилированную программу (на промежуточном языке, тип ассемблерного кода).
Хотя в идеале язык C# был бы независимым от платформы и независимым от платформы и среды выполнения, в истории C# было разработано несколько основных функций языка, где либо текущие версии CLR не допускали эту функцию, либо эта функция была основана на типы более высокого уровня и дополнения фреймворка (например, Async-Await в C# 5 и кортежи значений в определенной степени в C# 7).
В C# 8 языковые функции, такие как асинхронные потоки и диапазоны, требуют новых типов каркаса, которые аналогично не существуют в текущих / более ранних версиях каркасов. Новые элементы интерфейса по умолчанию требуют изменений CLR. Таким образом, эти языковые функции (синтаксис) не будут компилироваться с более ранними версиями Framework и CLR.
В отличие от предыдущих языковых итераций, Microsoft не выпускает эти требования в новой версии.Net Framework 4.8 . Вместо этого они выдвигают.Net Core 3.0 в качестве эталонной платформы, что позволяет им потенциально быстрее выполнять итерации.
Что касается Visual Studio, хотя вы могли бы написать код на C# 8 в более ранней версии IDE и скомпилировать его для среды выполнения.Net Core 3.0, вы бы потеряли значительное количество инструментов, простоты и опыта разработчика. Инструменты для подсветки синтаксиса, завершения, исправления кода и т. Д. Полагаются на Roslyn, который предоставляет богатые API для анализа кода.
Поскольку развертывание платформы и языка не полностью синхронизировано, предварительные просмотры в Visual Studio предоставляют (в основном) совместимые версии платформы и языка для тестирования новых функций обоих.
Хорошим справочным материалом является раздел "Зависимости платформы" в блоге Building C# 8.0.
Редактировать:
Чтобы ответить на вопрос комментария "Как устанавливается C# 8": языковая спецификация реализована и поставляется в виде компилятора (Roslyn). Пожалуйста, ознакомьтесь с репозиторием Roslyn GitHub, в котором описано, как компилятор собирается, выпускается и устанавливается - с конкретной установкой Visual Studio или без нее.
Есть два способа заставить C# 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, или вам придется установить их позже, чтобы иметь возможность ориентироваться на эти фреймворки.
Итак: - C# -> Roslyn compiler
- время выполнения -> соответствующий SDK
Небольшое дополнение: Глядя на поддержку новых функций в C#, Microsoft явно не сделает.NET Full Framework (4.8 и более поздние версии) .NET Standard 2.1 совместимым. Только.NET Core продолжит развиваться в будущем.