Уверен, большинство людей, читающих это, знают, что Microsoft недавно анонсировала ASP.NET Core и .NET Core 2.0 Preview 1 на Microsoft Build 2017.
У этой статьи нет цели — дать введение в ASP.NET Core. Вместо этого мы рассмотрим установку .NET Core 2.0 Preview 1 на ваш компьютер таким образом, чтобы это не мешало параллельно работать над другими проектами под ASP.NET Core 1.0/1.1. Т.е. мы установим несколько версий .NET Core на одном компьютере.
Установка .NET Core 2.0 Preview 1 SDK
Очевидно, первое, что нужно сделать — установить .NET Core 2.0 Preview 1 SDK отсюда. Это очень легко: никакого выбора вариантов установки — просто скачиваете и устанавливаете. И там только один номер версии!
Одно небольшое замечание: .NET Core теперь также включает ASP.NET Core. Это значит, что вам нужно устанавливать меньше внешних пакетов, когда вы разворачиваете свое приложение, что не может не радовать!
Стоит также отметить, что, если вы хотите создавать приложения ASP.NET Core 2.0 в Visual Studio, вам нужно будет установить предварительную версию Visual Studio 2017. Её можно устанавливать параллельно со стабильной версией.
Версии .NET Core
Выше я написал, что новый .NET Core имеет только один номер версии 2.0 preview 1, но это не совсем так. Есть два разных аспекта установки .NET Core: номер версии SDK/CLI (command line interface) и номер версии runtime (среды исполнения или .NET Core Shared Framework Host).
Если вы только-что установили 2.0 preview 1, то, если наберете в консоли dotnet --info, увидите примерно следующее:
$ dotnet --info
.NET Command Line Tools (2.0.0-preview1-005977)
Product Information:
Version: 2.0.0-preview1-005977
Commit SHA-1 hash: 414cab8a0b
Runtime Environment:
OS Name: Windows
OS Version: 10.0.14393
OS Platform: Windows
RID: win10-x64
Base Path: C:Program Filesdotnetsdk2.0.0-preview1-005977
Microsoft .NET Core Shared Framework Host
Version : 2.0.0-preview1-002111-00
Build : 1ff021936263d492539399688f46fd3827169983
Там целая куча разной информации, среди которой есть два разных номера версий:
- 2.0.0-preview1-005977 — версия SDK
- 2.0.0-preview1-002111-00 — версия среды исполнения
Но эти номера версий немного вводят в заблуждение. У меня на компьютере установлены также .NET Core SDK версии 1.0 и .NET Core Runtime версии 1.1.1 и 1.0.4, но здесь нет никакой информации о инх.
Понимание версий .NET Core runtime
Одно из преимуществ .NET Core заключается в возможности установи параллельно нескольких версий среды исполнения параллельно, без влияния их друг на друга. Это отличается от того, как происходит установка .NET Framework. Вы не можете установить параллельно .NET Framework 4.5, 4.6 и 4.7 — версия 4.7 заменит предыдущие версии.
Вы можете увидеть, какие версии среды исполнения .NET Core уже установлены, если зайдете в папку C:Program FilesdotnetsharedMicrosoft.NETCore.App
(на маках нужно смотреть в папку /usr/local/share/dotnet/shared/Microsoft.NETCore.App
). Как видите, на моем компьютере установлено три версии:
Следующий вопрос — как узнать, какая версия среды исполнения будет использоваться, когда вы запускаете свое приложение?
Всё очень просто: вам нужно указать нужную версию в .csproj
файле!
Например, в проекте .NET Core 1.1 вы можете установить параметр <TargetFramework>
(или <TargetFrameworks>
, если вы собираете проект под несколько разных версий) в значение netcoreapp1.1
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
</Project>
В этом случае приложение будет использовать .NET Core версии 1.1.1 (см. выше список установленных версий). Если вы установите <TargetFramework>
в значение netcoreapp1.0
, то будет использоваться версия 1.0.4.
Файл .csproj:
для ASP.NET приложения, использующего runtime версии 2.0 preview 1
будет выглядеть примерно так:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<UserSecretsId>aspnet-v2test-32250BD7-D335-414A-A537-53B40874D211</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<Folder Include="wwwroot" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0-preview1-final" />
</ItemGroup>
</Project>
В файле .csproj
указано для <TargetFramework>
значение netcoreapp2.0
и будет использована максимальная соответствующая ему версия (на моем компьютере — это 2.0.0-preview1-002111-00
).
Понимание версий SDK
Надеюсь, теперь вы всё понимаете про версии среды исполнения .NET Core. Но у нас всё еще остается открытым вопрос про версии SDK/CLI.
Если вы перейдете в папку C:Program Filesdotnetsdk
(на маках нужно смотреть в папку /usr/local/share/dotnet/sdk
), вы увидите, какие версии SDK установлены на вашем компьютере. Как видите, у меня установлено две версии: 1.0.0
и 2.0.0-preview1-005977
.
Грубо говоря, SDK — это штука, которая предоставляет команды, связанные со сборкой: dotnet new
, dotnet build
, dotnet publish
и т.п.
В общем случае, любая версия SDK, которая больше версии, использованной при создании проекта, может быть использована для его сборки (dotnet build
и dotnet publish
). Таким образом, вы можете просто использовать SDK версии 2.0 для работы с проектами, созданными в SDK версии 1.0.
Это значит, что в большинстве случаев вы можете использовать для всех проектов последнюю версию SDK. Другая версия SDK может понадобиться, например, если вы хотите собрать проект, использующий файл project.json
(в этом случае вам будет нужен RC2 SDK).
Текущая версия SDK также влияет на новые проекты, создаваемые командой dotnet new
. Если вы используете SDK версии 2.0 Preview 1, вы получите приложение на основе netcoreapp2.0
, если вы используете SDK версии 1.0, вы получите приложение на основе netcoreapp1.1
!
Следующий вопрос — как указать приложению, какую версию SDK нужно использовать.
Выбор версии SDK в файле global.json
Файл global.json
имеет очень простой формат, который просто задает, какую версию SDK нужно использовать:
{
"sdk": {
"version": "1.0.0"
}
}
Раньше файл
global.json
использовался еще и для того, чтобы указать папки с исходным кодом решения, но эта функциональность будет удалена в будущих версиях.
Когда вы запускаете dotnet new
или dotnet build
, dotnet ищет global.json
, сначала в текущей папке, потом во всех родительских папках. Если global.json
найден (и доступна версия SDK, указанная там!), то эта версия будет использована для всех запускаемых команд SDK внутри этой папки. Если не получилось найти ни один файл global.json
, будет использована последняя доступная версия SDK, в моем случае, 2.0.0-preview1-005977
.
Лично я поместил вышеуказанный global.json
в свою папку Projects
и поэтому все существующие проекты, которые в ней находятся, будут продолжать использовать SDK 1.0.0 (а также все новые проекты, которые я там создаю). Затем я создал подпапку netcore20
и добавил следующий global.json
. В ней я размещаю все проекты, в которых хочу "поиграть" с предварительной версией ASP.NET Core 2.0, не рискуя получить проблемы из-за этого!
{
"sdk": {
"version": "2.0.0-preview1-005977"
}
}
Заключение
Версионирование было одной из проблем .NET Core до недавнего времени. Выравнивание всех версий в будущем, безусловно, упростит ситуацию и, как мы надеемся, это будет вызывать меньше путаницы. Но по-прежнему стоит попытаться понять разницу между версиями среды выполнения и версиями SDK. Я надеюсь, что этот пост помог прояснить некоторые из этих вопросов!
Автор: dima117