Обновление проекта с ASP.NET Core 1.1 на ASP.NET Core 2.0

создано: 26.08.2017 | опубликовано: 27.08.2017 | обновлено: 10.12.2017 | просмотров за всё время: 608

Блог, который вы читаете, изначально был написан на ASP.NET Core 1.1. В этой статье хочу поделиться опытом миграции на ASP.NET Core 2.0.

Вступление

В качестве вступления хочу упомянуть статью с официального сайта "Migrating from ASP.NET Core 1.x to ASP.NET Core 2.0", которая, кстати сказать, мне никак не помогла. 

Тупик

Обновляя свой блог и шествуя по пунктам указанных в официальной статьи, я добрался до такого момента:

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;

namespace AspNetCoreDotNetCore2._0App
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
}

Как выяснелось в процессе, то ли сборок не хватило, то ли еще какая оказия приключилась, но собрать решение (solution) из трех проектов (project) у меня не получилось. Было принято решение, создать "чистый" проект и перенести файлы и классы из старого проекта.

Новый проект лучше

Перенос файлов в новый проект дал свои результаты. Через пару часов получилось собрать и запустить проект. На первый взгля вроде бы всё заработало, но при попытке "походить" по страницам блога выяснилось, что некоторые пути (route) на сайте просто не работают.

Проблема

На поиска проблемы, я потратил уйму времени и нервов. Но система маршрутов (routes) на ASP.NET Core 2.0 никак не хотела работать как надо. Зная как работает система, очень трудно ошибиться, но, тем не менее, я проверял настройки снова и снова. Я пересмотрел все материалы на сайте, залез на официальный сайт (может что-то в routing измененили) - безуспешно. Посмотрел статьи в интернете про новый ASP.NET Core 2.0 на сопуствующие темы, но результат - отсутствие результата.

Решение

Я создал еще один новый проект на ASP.NET Core 2.0  и "перетащил" туда только настройки маршрутов - опять ничего не получилось. Ошибка отображалась такая же: "Маршрут не найден и всё тут". Тогда я стал по одному машруту добавлять в систему. И, о, чудо! Получилось! Оказалось, что мои настройки машрутизации переопределили основной параметр для маршрутов по умолчанию "ID" на "PAGE", то есть был параметр "page":

routes.MapRoute(
    name: "Blog",
    template: "blog/{category=all}/{action=index}/{page=1}/{tag?}",
    defaults: new { controller = "posts" }
);

И при таком шаблоне ничего не работало на  ASP.NET Core 2.0, а если учесть что на ASP.NET Core 1.1 всё чётко работало, то я и предположить не мог, что смена названия параметра может всё поломать.

Стоило мне поменять обратно, как стразу вся система поднялась и встала в стойку "готова разруливать маршруты", ожидая кликов мышкой по ссылкам.

Нюансы

Некоторые сборки сторонних разработчиков всё также остались в версии для ASP.NET Core 1.1, но это никак не помешало запуститься и работать уже под новой ASP.NET Core 2.0. Всё конечно же зависит от предназначения сборок, и, можно сказать, что мне повезло.

Заключение

Microsoft семимильными шагами продвигается к кроссплатформенности. На разработку общей платформы брошены лучшие силы. Часть разработки отдано в руки общественности (community open source). Но... Даже несмотря на то, что Microsoft дала добро на использование ASP.NET Core 2.0 в коммерческой разработке (лицензия "Go Live" уже была даже у ASP.NET Core 1.1), я бы не рекомендовал использовать для новых проектов новую платформу. По крайней мере, пока платформа не обретет номер версии 3 и выше.

Комментарии к статье (1)

30.08.2017 8:01:23 Calabonga

Поступило предложение выложить движок моего блога в OpenSource для всеобщего пользования. Те, кто поддерживает предложение отпишитесь в комментариях пожалуйста.

Ну, значит не будем публиковать...