net core sdk что это
Доступные пакеты SDK
Доступны следующие пакеты SDK:
Можно также создать собственный пакет SDK и распространять его с помощью NuGet.
Файлы проекта
Чтобы указать пакет SDK, который содержится в NuGet, добавьте версию в конец имени или укажите имя и версию в файле global.json.
Другим способом указания пакета SDK является элемент Sdk верхнего уровня.
На компьютере Windows файлы Sdk.props и Sdk.targets можно найти в папке %ProgramFiles%\dotnet\sdk\[версия]\Sdks\Microsoft.NET.Sdk\Sdk.
Предварительная обработка файла проекта
Включения и исключения по умолчанию
Элемент | Стандартная маска включения | Стандартная маска исключения | Стандартная маска удаления |
---|---|---|---|
Compile | **/*.cs (или другие расширения языка) | **/*.user; **/*.*proj; **/*.sln; **/*.vssscc | Н/Д |
EmbeddedResource | **/*.resx | **/*.user; **/*.*proj; **/*.sln; **/*.vssscc | Н/Д |
None | **/* | **/*.user; **/*.*proj; **/*.sln; **/*.vssscc | **/*.cs; **/*.resx |
Ошибки сборки
Если вы явным образом определите любой из этих элементов в файле проекта, скорее всего, произойдет ошибка сборки NETSDK1022 с примерно таким сообщением:
Чтобы устранить такую проблему, выполните любое из следующих действий:
Если вы хотите указать файлы, которые нужно публиковать вместе с приложением, для этого можно по-прежнему использовать привычные механизмы MSBuild (например, элемент Content ).
Неявные директивы using
Неявные директивы global using добавляются для проектов, которые используют один из следующих пакетов SDK:
Директива global using добавляется для каждого пространства имен в наборе стандартных пространств имен, в зависимости от конкретного пакета SDK для проекта. Эти пространства имен по умолчанию показаны в следующей таблице.
SDK | Пространства имен по умолчанию |
---|---|
Microsoft.NET.Sdk | System System.Collections.Generic System.IO System.Linq System.Net.Http System.Threading System.Threading.Tasks |
Microsoft.NET.Sdk.Web | System.Net.Http.Json Microsoft.AspNetCore.Builder Microsoft.AspNetCore.Hosting Microsoft.AspNetCore.Http Microsoft.AspNetCore.Routing Microsoft.Extensions.Configuration Microsoft.Extensions.DependencyInjection Microsoft.Extensions.Hosting Microsoft.Extensions.Logging |
Microsoft.NET.Sdk.Worker | Microsoft.Extensions.Configuration Microsoft.Extensions.DependencyInjection Microsoft.Extensions.Hosting Microsoft.Extensions.Logging |
Microsoft.NET.Sdk.WindowsDesktop (Windows Forms) | Пространства имен Microsoft.NET.Sdk System.Drawing System.Windows.Forms |
Microsoft.NET.Sdk.WindowsDesktop (WPF) | Пространства имен Microsoft.NET.Sdk System.IO удалено System.Net.Http удалено |
Неявные ссылки на пакет
При необходимости можно отключить неявные ссылки на пакеты с помощью свойства DisableImplicitFrameworkReferences и добавить явные ссылки только на необходимые платформы или пакеты.
События сборки
Настройка сборки
Пользовательские целевые объекты
Чтобы добавить пользовательские целевые объекты или свойства сборки, нужно поместить файлы в форме
.props (например, Contoso.Utility.UsefulStuff.targets ) в папку build проекта.
.NET — это бесплатная платформа разработки с открытым исходным кодом для создания различных типов приложений, таких как следующие:
Для совместного использования функциональных возможностей различных приложений и типов приложений используются библиотеки классов.
Кроссплатформенные
Поддерживаемые архитектуры процессоров:
.NET позволяет использовать специальные возможности платформы, такие как API операционной системы. Примерами являются Windows Forms и WPF в Windows и собственные привязки к каждой мобильной платформе из Xamarin.
Открытый исходный код
Поддержка
Инструменты и производительность
.NET предоставляет возможность выбора языков, интегрированных сред разработки (IDE) и других средств.
Языки программирования
C# (произносится как «си шарп») — современный объектно-ориентированный и типобезопасный язык программирования. C# относится к широко известному семейству языков C, и покажется хорошо знакомым любому, кто работал с C, C++, Java или JavaScript.
Язык F# поддерживает функциональные, объектно-ориентированные и императивные модели программирования.
Интегрированные среды разработки
Онлайн-среда Visual Studio Code, которая в настоящее время доступна в виде бета-версии.
Пакет SDK и среды выполнения
Загружаемый пакет SDK содержит следующие компоненты.
Загружаемая среда выполнения содержит следующие компоненты.
Дополнительные сведения см. в следующих ресурсах:
Система проектов и MSBuild
И вот один для веб-приложения:
NuGet
Дополнительные сведения см. в документации NuGet.
.NET Interactive — это группа средств и интерфейсов командной строки, которые позволяют пользователям создавать интерактивные возможности в веб-приложениях, разметке и записных книжках.
Дополнительные сведения см. в следующих ресурсах:
Модели выполнения.
.NET CLR — это кроссплатформенная среда выполнения, которая включает поддержку Windows, macOS и Linux. Среда CLR обрабатывает выделение памяти и управление ей. Среда CLR также является виртуальной машиной, которая не только выполняет приложения, но и создает, а также компилирует код с помощью JIT-компилятора.
Для получения дополнительной информации см. Common Language Runtime.
JIT-компилятор и промежуточный язык
Так как JIT-компиляция происходит во время выполнения приложения, время компиляции является частью времени выполнения. Таким образом, JIT-компиляторы должны поддерживать баланс между временем оптимизации кода и экономии, к которой может привести результирующий код. Но JIT-компилятор знает фактическое оборудование и может освободить разработчиков от поставки различных реализаций для различных платформ.
Компилятор AOT
Автоматическое управление памятью
Сборщик мусора (GC) управляет выделением и освобождением памяти для приложений. Каждый раз, когда код создает новый объект, среда CLR выделяет память для объекта из управляемой кучи. Пока в управляемой куче есть доступное адресное пространство, среда выполнения продолжает выделять пространство для новых объектов. Когда остается недостаточное свободное пространство адресов, сборщик мусора проверяет наличие объектов в управляемой куче, которые больше не используются приложением. Затем эта память освобождается.
GC — это одна из служб CLR, которая помогает обеспечить безопасность памяти. Программа является безопасной по памяти, если она обращается только к выделенной памяти. Например, среда выполнения гарантирует, что приложение не обращается к невыделенной памяти за пределами границ массива.
Дополнительные сведения о сборке мусора см. в статьях Автоматическое управление памятью и Основы сборки мусора.
Работа с неуправляемыми ресурсами
Дополнительные сведения см. в разделе Очистка неуправляемых ресурсов.
Модели развертывания
Можно установить несколько версий среды выполнения параллельно, чтобы запускать зависящие от платформы приложения, предназначенные для разных версий среды выполнения. Дополнительные сведения см. в разделе Целевые платформы.
Исполняемые файлы создаются для конкретных целевых платформ, которые указываются с помощью идентификатора среды выполнения (RID).
Библиотеки среды выполнения.
.NET имеет обширный стандартный набор библиотек классов, известный как библиотеки среды выполнения, библиотеки платформы или библиотеки базовых классов (BCL). Эти библиотеки предоставляют реализации для многих общих и зависящих от рабочей нагрузки типов, а также функциональные возможности.
Расширения библиотек среды выполнения
Библиотеки для некоторых часто используемых функциональных возможностей приложения не включены в библиотеки среды выполнения, но доступны в пакетах NuGet, как показано ниже.
Пакет NuGet | Документация |
---|---|
Microsoft.Extensions.Hosting | Управление жизненным циклом приложения (универсальный узел) |
Microsoft.Extensions.DependencyInjection | Внедрение зависимостей |
Microsoft.Extensions.Configuration | Конфигурация |
Microsoft.Extensions.Logging | Logging |
Microsoft.Extensions.Options | Шаблон параметров |
Доступ к данным
.NET предоставляет объектно-реляционный модуль сопоставления (ORM) и способ написания SQL-запросов в коде.
Entity Framework Core
LINQ позволяет писать декларативный код для работы с данными. Данные могут быть представлены разными формами (например, объектами в памяти, содержимым базы данных SQL или XML-документом), но обычно создаваемый код LINQ не отличается для каждого из источников данных.
Уточнение терминологии
Среда выполнения
платформа
Пакет SDK
platform
Сложные сценарии
Взаимодействие на уровне машинного кода
Основным способом осуществления взаимодействия с собственными API является «вызов неуправляемого кода» или сокращенно P/Invoke. P/Invoke поддерживается на платформах Linux и Windows. Способ, который подходит только для Windows, называется «COM-взаимодействием» и используется для работы с COM-компонентами в управляемом коде. Он основан на инфраструктуре P/Invoke, но работает иначе.
Небезопасный код
Дополнительные сведения см. в разделе Небезопасный код и указатели.
.NET 6 — это последняя версия.
Поддерживаемые выпуски
Даты окончания жизненного цикла версий Windows 10 зависят от выпуска. В следующей таблице рассматриваются только выпуски Домашняя, Профессиональная, Pro для образовательных учреждений и Pro для рабочих станций. Дополнительные сведения см. в справочных материалах по жизненному циклу поддержки Windows.
Символ + представляет минимальную версию.
Операционная система | .NET Core 3.1 | .NET 5 | .NET 6 |
---|---|---|---|
Windows 11 | ✔️ | ✔️ | ✔️ |
Windows Server 2022 | ✔️ | ✔️ | ✔️ |
Windows 10, версия 21H1 | ✔️ | ✔️ | ✔️ |
Windows 10 или Windows Server версии 20H2 | ✔️ | ✔️ | ✔️ |
Windows 10 или Windows Server версии 2004 | ✔️ | ✔️ | ✔️ |
Windows 10 или Windows Server версии 1909 | ✔️ | ✔️ | ✔️ |
Windows 10 или Windows Server версии 1903 | ✔️ | ✔️ | ✔️ |
Windows 10, версия 1809 | ✔️ | ✔️ | ✔️ |
Windows 10, версия 1803 | ✔️ | ✔️ | ✔️ |
Windows 10, версия 1709 | ✔️ | ✔️ | ✔️ |
Windows 10 (версия 1607) | ✔️ | ✔️ | ✔️ |
Windows 8.1 | ✔️ | ✔️ | ✔️ |
Windows 7 с пакетом обновления 1 (SP1), ESU | ✔️ | ✔️ | ✔️ |
Windows Server 2019 Windows Server 2016 Windows Server 2012 R2 Windows Server 2012 | ✔️ | ✔️ | ✔️ |
Windows Server Core 2012 R2 | ✔️ | ✔️ | ✔️ |
Windows Server Core 2012 | ✔️ | ✔️ | ✔️ |
Nano Server, версия 1809 и выше | ✔️ | ✔️ | ✔️ |
Nano Server, версия 1803 | ✔️ | ❌ | ❌ |
Неподдерживаемые выпуски
Сведения о среде выполнения
В Windows можно установить три различные версии среды выполнения:
Сведения о пакете SDK
Компьютеры Windows на базе ARM
Поддерживаемые функции
Различия в путях
Конфликты путей
Переменные пути
Зависимости
.NET 6 поддерживает следующие версии Windows:
Символ + представляет минимальную версию.
Операционная система | Version | Архитектуры |
---|---|---|
Windows 11 | 21H2 | x64, ARM64 |
Клиент Windows 10 | 1607+ | x64, x86, ARM64 |
Клиент Windows | 7 с пакетом обновления 1 и более поздних версий (SP1+), 8.1 | x64, x86 |
Windows Server | 2012+ | x64, x86 |
Windows Server Core | 2012+ | x64, x86 |
Nano Server | 1809+ | X64 |
.NET 5 поддерживает следующие версии Windows:
Символ + представляет минимальную версию.
Операционная система | Version | Архитектуры |
---|---|---|
Windows 11 | 21H2 | x64, ARM64 |
Клиент Windows 10 | 1607+ | x64, x86, ARM64 |
Клиент Windows | 7 с пакетом обновления 1 и более поздних версий (SP1+), 8.1 | x64, x86 |
Windows Server | 2012+ | x64, x86 |
Windows Server Core | 2012+ | x64, x86 |
Nano Server | 1809+ | X64 |
.NET Core 3.1 поддерживает следующие версии Windows:
Символ + представляет минимальную версию. Конкретные требования к версии ОС см. в разделе Поддерживаемые выпуски.
Операционная система | Version | Архитектуры |
---|---|---|
Windows 11 | 21H2 | x64, ARM64 |
Клиент Windows 10 | 1607+ | x64, x86 |
Клиент Windows | 7 с пакетом обновления 1 и более поздних версий (SP1+), 8.1 | x64, x86 |
Windows Server | 2012+ | x64, x86 |
Nano Server | 1803+ | x64, ARM32 |
.NET Core 3.0 поддерживает следующие версии Windows:
Символ + представляет минимальную версию.
Операционная система | Version | Архитектуры |
---|---|---|
Клиент Windows | 7 с пакетом обновления 1 и более поздних версий (SP1+), 8.1 | x64, x86 |
Клиент Windows 10 | Версия 1607+ | x64, x86 |
Windows Server | 2012 R2+ | x64, x86 |
Nano Server | Версия 1803+ | x64, ARM32 |
.NET Core 2.2 поддерживает следующие версии Windows:
Символ + представляет минимальную версию.
Операционная система | Version | Архитектуры |
---|---|---|
Клиент Windows | 7 с пакетом обновления 1 и более поздних версий (SP1+), 8.1 | x64, x86 |
Клиент Windows 10 | Версия 1607+ | x64, x86 |
Windows Server | 2008 R2 с пакетом обновления 1 или более поздней версии (SP1+) | x64, x86 |
Nano Server | Версия 1803+ | x64, ARM32 |
.NET Core 2.1 поддерживает следующие версии Windows:
Символ + представляет минимальную версию.
Операционная система | Version | Архитектуры |
---|---|---|
Клиент Windows | 7 с пакетом обновления 1 и более поздних версий (SP1+), 8.1 | x64, x86 |
Клиент Windows 10 | Версия 1607+ | x64, x86 |
Windows Server | 2008 R2 с пакетом обновления 1 или более поздней версии (SP1+) | x64, x86 |
Nano Server | Версия 1803+ | x64, |
Автономная установка для Windows 7
Обязательно ознакомьтесь с зависимостями ниже, необходимыми для Windows 7.
Windows 7 / Vista / 8.1 / Server 2008 R2 / Server 2012 R2
Приведенные выше требования также применяются, если возникает ошибка, связанная с любой из следующих библиотек DLL:
Установка с помощью функции автоматизации PowerShell
Сценарии dotnet-install используются для автоматизации непрерывной интеграции и ее осуществления без прав администратора. Вы можете скачать сценарий со страницы справочника по сценариям dotnet-install.
Установка с помощью Visual Studio
Если среда Visual Studio уже установлена, вы можете проверить ее версию, выполнив указанные ниже действия.
Выбор рабочей нагрузки
При установке или изменении Visual Studio выберите одну или несколько из следующих рабочих нагрузок в зависимости от типа создаваемого приложения:
Установка вместе с Visual Studio Code
Visual Studio Code — это эффективный и облегченный редактор исходного кода, который работает на компьютере. Visual Studio Code доступен для Windows, macOS и Linux.
Установщик Windows
/quiet
Предотвращает отображение любого пользовательского интерфейса и запросов.
norestart
Предотвращает все попытки перезапуска.
В случае успешной установки установщик возвращает код 0; если требуется перезагрузка, установщик возвращает код 3010. Любое другое значение обычно является кодом ошибки.
Скачивание и установка вручную
Такой подход позволяет установить несколько версий в отдельные расположения, а затем явно выбрать расположение установки, которое должно использовать приложение, запустив приложение с переменными среды, указывающими на это расположение.
Docker
Контейнеры обеспечивают простой способ изоляции приложения от остальной части основной системы. Контейнеры на одном компьютере совместно использую только ядро, а также используют ресурсы, которые передаются в приложение.
Корпорация Майкрософт предоставляет образы, которые предназначены для конкретных сценариев. Например репозиторий ASP.NET Core содержит образы, которые предназначены для запуска приложений ASP.NET Core в рабочей среде.
.NET Core: номера версий и global.json
Стоит также отметить, что, если вы хотите создавать приложения ASP.NET Core 2.0 в Visual Studio, вам нужно будет установить предварительную версию Visual Studio 2017. Её можно устанавливать параллельно со стабильной версией.
Там целая куча разной информации, среди которой есть два разных номера версий:
Следующий вопрос — как узнать, какая версия среды исполнения будет использоваться, когда вы запускаете свое приложение?
Понимание версий SDK
В общем случае, любая версия SDK, которая больше версии, использованной при создании проекта, может быть использована для его сборки ( dotnet build и dotnet publish ). Таким образом, вы можете просто использовать SDK версии 2.0 для работы с проектами, созданными в SDK версии 1.0.
Это значит, что в большинстве случаев вы можете использовать для всех проектов последнюю версию SDK. Другая версия SDK может понадобиться, например, если вы хотите собрать проект, использующий файл project.json (в этом случае вам будет нужен RC2 SDK).
Следующий вопрос — как указать приложению, какую версию SDK нужно использовать.
Выбор версии SDK в файле global.json
Файл global.json имеет очень простой формат, который просто задает, какую версию SDK нужно использовать:
Раньше файл global.json использовался еще и для того, чтобы указать папки с исходным кодом решения, но эта функциональность будет удалена в будущих версиях.
Заключение
Целевые платформы в проектах в стиле SDK
При выборе целевой платформы для приложения или библиотеки вы указываете набор API-интерфейсов, которые вы хотите сделать доступными для приложения или библиотеки. Целевая платформа указывается в файле проекта с помощью моникеров целевой платформы (TFM).
Последние версии
Неподдерживаемые целевые платформы
TFM | Совместимость |
---|---|
net5.0 | net1.4 (с предупреждением NU1701) netcoreapp1.3.1 (предупреждение при ссылке на WinForms или WPF) netstandard1.2.1 |
net5.0-windows | netcoreapp1.3.1 (и все остальное, унаследованное от net5.0 ) |
net6.0 | (версия, следующая после net5.0 ) |
net6.0-android | xamarin.android (и все другие платформы, наследуемые от net6.0 ) |
net6.0-ios | xamarin.ios (и все другие платформы, наследуемые от net6.0 ) |
net6.0-macos | xamarin.mac (и все другие платформы, наследуемые от net6.0 ) |
net6.0-maccatalyst | xamarin.ios (и все другие платформы, наследуемые от net6.0 ) |
net6.0-tvos | xamarin.tvos (и все другие платформы, наследуемые от net6.0 ) |
net6.0-windows | (версия, следующая после net5.0-windows ) |
Предлагаемые целевые объекты
Используйте эти рекомендации, чтобы определить, какие TFM использовать в приложении:
Версия ОС в TFM
Поддержка старых версий ОС
Несмотря на то что приложение или библиотека для конкретной платформы компилируются для API-интерфейсов из определенной версии этой ОС, вы можете сделать их совместимыми с более ранними версиями ОС, добавив свойство SupportedOSPlatformVersion в файл проекта. Свойство SupportedOSPlatformVersion указывает минимальную версию ОС, необходимую для запуска приложения или библиотеки. Если вы явно не укажете эту минимальную версию ОС времени выполнения в проекте, по умолчанию используется версия платформы из TFM.
Чтобы приложение правильно выполнялось в более старой версии ОС, оно не может вызывать API-интерфейсы, которых нет в этой версии ОС. Однако можно добавить условия для вызовов к более новым API-интерфейсам, чтобы они вызывались только при работе в той версии ОС, которая их поддерживает. Этот шаблон позволяет проектировать приложение или библиотеку для поддержки работы в более старых версиях ОС, используя преимущества новых функций ОС при работе в более новых версиях ОС.
Как указать целевую платформу
При указании нескольких целевых платформ можно условно ссылаться на сборки для каждой целевой платформы. В коде можно условно компилировать эти сборки с использованием символов препроцессора с логикой if-then-else.
В библиотеке или приложении следует написать условный код компиляции с помощью директив препроцессора для каждой целевой платформы.
Неподдерживаемые целевые платформы
Следующие целевые платформы являются устаревшими. Пакеты, предназначенные для этих целевых платформ, следует перевести на предлагаемые для замены.