Обновление проекта с ASP.NET Core 1.1 на ASP.NET Core 2.0
Полезности | создано: 26.08.2017 | опубликовано: 27.08.2017 | обновлено: 13.01.2024 | просмотров: 4169 | всего комментариев: 1
Блог, который вы читаете, изначально был написан на 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)
Поступило предложение выложить движок моего блога в OpenSource для всеобщего пользования. Те, кто поддерживает предложение отпишитесь в комментариях пожалуйста.
Ну, значит не будем публиковать...