С этим новым релизом мы рады сообщить, что Blazor теперь в стадии превью! Blazor больше не является экспериментальным, и мы обязуемся предоставлять его в качестве поддерживаемого фреймворка веб-интерфейса, включая поддержку запуска на стороне клиента в браузере на WebAssembly.

Чуть более года назад мы запустили экспериментальный проект Blazor с целью создания клиентского фреймворка веб-интерфейса на основе .NET и WebAssembly. В то время Blazor был нечто чуть-большим, чем прототип, и было много открытых вопросов о жизнеспособности запуска .NET в браузере. С тех пор мы выпустили девять экспериментальных релизов Blazor, посвященных различным проблемам, включая компонентную модель, привязку данных, обработку событий, маршрутизацию, макеты, размер приложения, модели хостинга, отладку и инструменты. Сейчас мы находимся в точке, когда мы думаем, что Blazor готов сделать свой следующий шаг.
image

Упрощение именования и управления версиями


Ранее в одних случаях мы использовали терминологию Razor Components, а в других Blazor. Это сбивало с толку, поэтому, следуя многочисленным отзывам сообщества, мы решили отказаться от имени ASP.NET Core Razor Components и вместо этого вернуться к названию Server-side Blazor.

Это подчеркивает, что Blazor является моделью одного клиентского приложения с несколькими моделями хостинга:

  • Server-side Blazor – работающий на сервере через SignalR
  • Client-side Blazor – работающий на стороне клиента на WebAssembly

… но в любом случае, это все та же самая модель программирования. Одни и те же компоненты Blazor могут быть размещены в обеих средах.

Также, поскольку Blazor теперь является частью .NET Core, версии пакетов Blazor на стороне клиента теперь соответствуют версиям .NET Core 3.0. Например, номер версии всех превью-пакетов, которые мы отправляем сегодня — 3.0.0-preview4-19216-03. Мы больше не используем отдельные 0.x номера версий для работающих на стороне клиента пакетов Blazor.

Что и когда будет поставляться


  • Server-side Blazor будет поставляться как часть .NET Core 3.0. Об этом уже было объявлено в прошлом октябре.
  • Client-side Blazor не будет поставляться как часть первоначального выпуска .NET Core 3.0, но сейчас мы объявляем, что она будет поставляться как часть будущего выпуска .NET Core (и, следовательно, больше не является “экспериментом”).

С каждым превью-выпуском .NET Core 3.0 мы будем продолжать поставлять превью-выпуски как серверной, так и клиентской версии Blazor.

Сегодняшний превью-релиз


Новые фичи в этой превью-версии:

  • Обновлены шаблоны для использования расширения файла .razor
  • _Imports.razor
  • Компоненты Scope с using
  • Новый шаблон элемента компонента
  • Новые иконки Blazor
  • Поддержка Blazor в Visual Studio Code

Ознакомьтесь с анонсом ASP.NET Core 3.0 Preview 4 для получения подробной информации об этих улучшениях. Смотрите также примечания к выпуску Blazor для получения дополнительной информации об этой превью-версии.

Получите превью-версию Blazor


Чтобы начать работу с превью-версией Blazor, установите следующее:

  1. .NET Core 3.0 Preview 4 SDK (3.0.100-preview4-011223)
  2. Шаблоны Blazor через командную строку:

    dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.0.0-preview4-19216-03
  3. Visual Studio 2019 Preview с ASP.NET и выбранной рабочей нагрузкой веб-разработки, а также последнее расширение Blazor из Visual Studio Marketplace или Visual Studio Code с последней версией расширения C# (теперь с поддержкой Blazor!).

Вы можете найти инструкции о начале работы, документацию и учебные материалы для Blazor на нашей новой домашней странице Blazor — blazor.net.

image

Обновление до превью-версии Blazor


Чтобы обновить существующие приложения Blazor до preview, сначала убедитесь, что установлены необходимые компоненты, перечисленные выше, а затем выполните следующие шаги:

  • Обновите все ссылки пакетов Microsoft.AspNetCore.Blazor.* на 3.0.0-preview4-19216-03.
  • Удалите все ссылки на пакеты на Microsoft.AspNetCore.Components.Server.
  • Удалите все DotNetCliToolReference в Microsoft.AspNetCore.Blazor.Cli замените их ссылкой на пакет Microsoft.AspNetCore.Blazor.DevServer.
  • В клиентских проектах Blazor удалите свойства image и image.
  • В клиентских проектах Blazor добавьте свойство image.
  • Переименуйте все _ViewImports.cshtml файлы в _Imports.razor.
  • Переименуйте все оставшиеся файлы .cshtml в .razor.
  • Переименуйте components.webassembly.js в blazor.webassembly.js
  • Удалите любое использование пространства имен Microsoft.AspNetCore.Components.Services и при необходимости замените его на Microsoft.AspNetCore.Components.
  • Обновите проекты сервера для использования маршрутизации endpoint:

    // Замените это:
    app.UseMvc(routes =>
    {
        routes.MapRoute(name: "default", template: "{controller}/{action}/{id?}");
    });
    
    // Этим:
    app.UseRouting();
    
    app.UseEndpoints(routes =>
    {
        routes.MapDefaultControllerRoute();
    });
  • Запустите dotnet clean в решении, чтобы очистить старые декларации Razor.

Страницей сообщества Blazor теперь является Awesome Blazor


В рамках обновления сайта Blazor мы решили удалить страницу сообщества Blazor и вместо этого направить людей на управляемый сообществом сайт Awesome Blazor. Спасибо тебе, Адриен Торрис (Adrien Torris) за ведение этого действительно потрясающего списка ресурсов Blazor!

Изучите превью Blazor-UI от Telerik, DevExpress и Syncfusion


Blazor развивается и с помощью активного и поддерживающего сообщества, которое добавило все возможные примеры приложений, компонентов и библиотек в экосистему Blazor. Недавно популярные поставщики компонентов, такие как Telerik, DevExpress и Syncfusion, присоединились к нам и представили превью-компоненты Blazor UI. Мы рекомендуем вам попробовать эти варианты Blazor UI и сообщить им, что вы думаете.

Дайте фидбэк


Мы надеемся, что вам понравится этот превью-выпуск Blazor. Как и в предыдущих выпусках, ваши отзывы очень важны. Если у вас возникли проблемы или вопросы во время апробации Blazor, вы можете написать на GitHub. Вы также можете обратиться к нам и сообществу Blazor на Gitter, если вы застряли или хотите поделиться тем, как у вас работает Blazor. После того, как вы протестируете Blazor в течение некоторого времени, пожалуйста, сообщите нам, что вы думаете, приняв участие в нашем опросе. Нажмите на ссылку опроса, показанную на домашней странице приложения, при запуске одного из шаблонов проекта Blazor:



Спасибо, что попробовали Blazor!

Комментарии (24)


  1. FreeBa
    29.04.2019 10:48

    image


  1. Simplevolk
    29.04.2019 11:59

    Blazor теперь не использует Mono? Если так, то поправьте в FAQ этот пункт (в github)


    1. medvedevia
      29.04.2019 23:44

      Использует, создал из шаблона проект, нажал в браузере F12 и увидел что загрузились mono.js, mono.wasm, Mono.Security.dll, Mono.WebAssembly.Interop.dll


  1. evocatus
    29.04.2019 16:20

    Интересно, скоро ли привязки для F# появятся…


  1. Marwin
    29.04.2019 23:14

    буквально в эти выходные решил попробовать начать переписывать WPF админскую прогу на blazor, так как операторы на маках страдают сидеть через RDP или в параллелсах. Заработало сходу… весь слой http обмена данным (прога работает через json api), сами модели данных, первичная обработка скопировались 1 в 1 из проекта WPF. По сути надо только заверстать интерфейс в html вместо xaml, навесить события кликов на кнопки и всё будет работать. Очень доволен, буду пилить потихоньку и ждать развития сообщества и кастомных компонентов.


    PS верю, что есть авалония для моего сценария… но если уж решаться переписывать для кроссплатформы, то у блэйзора всё таки по определению должен быть более широкий охват и плюс поддержка мобилки известными любому верстальщику средствами css.


    1. Marwin
      30.04.2019 01:08

      собственно, мне кажется, одна из причин неудачи silverlight (фиг с ним, с тем что надо было ставить плагин в отличие от блэйзора, который работает из коробки в современных браузерах. В конце концов flash раньше же ставили руками) в том, что как бы ни было приятно и удобно десктопщику шарписту делать интерфейс на xaml для вэба — это не его работа, и весь мир верстает на html, а так как почти всегда это всё таки делает другой человек, то запилить веб сайт на silverlight было просто тупо некому. А тут взяли лучшее из двух миров, убрав ненавистный шарпистам JS ))


      1. 0x1000000
        30.04.2019 07:17

        До массового применения flexbox, которое началось последние года 2-3, вёрстка на html была сущим адом и xaml был (да и остаётся) куда более подходящим для вёрстки веб приложений (не сайтов).


        Касательно Blazor, выглядит идея прикольно, но зачем? Ради лишь C# тащить на клиент целый рантайм это явно перебор. Я бы тогда уже предпочёл авлонию в браузере увидеть ) А так есть React, Angular и Vue, да и момент когда Typescript потеснит Js, на мой взгляд, не за горам.


        1. Marwin
          30.04.2019 09:27

          Не спорю, React и компания — традиционно сложившиеся инструменты. Однако кадры решают всё! У нас WPF админка как раз и была написана мной за неделю, бэкендером-шарпистом, потому что админка на React была написана (пол года мать их!) фрилансерами, постоянно которые вечно не на связи, все делают медленно и на отшибись, и устаревает буквально через пару месяцев (а фуллтайм веб разраба мы содержать не можем, ибо нет объемов работ). Во мне, конечно, есть зачатки фуллстака, но к реакту душа не лежит, могу поправить баг, подвинуть кнопку, но не более. Blazor вполне интересная замена реакту по крайней мере во внутренней корп среде, где во главе функционал и интеграция с существующей бизнес-логикой.


          1. 0x1000000
            30.04.2019 22:56

            Похоже вы только что отлично описали (потенциальную) целевую аудиторию этого фреймворка. Очень похоже на Silverlight strikes back :)


        1. Uolis
          30.04.2019 12:31

          Тут просто — я не хочу ради интранетовских сайтов, способных работать на всех устройствах, держать в голове все эти реакты, ангулары, вуи и прочие фреймворки. И ЯваСкрипт тоже. И даже CSS. В 50 лет просто тяжело держать в голове столько технологий да ещё и за ними следить, особенно если ты программист уже 30 лет и успел забыть едва ли не больше чем знал.
          В режиме SignalR Блазор не тащит на страницу вообще ничего, пустая размётка, а в это время на странице куча контролов и всё шевелится. И красот не надо, нужно чтобы всё работало, здесь и сейчас. Конечно это не для внешних сайтов, но внутри компаний огромная туча таких сайтиков, ради которых раньше приходилось чуть ли не штат держать, или фриланс, а сейчас вууух, и работает, причём сразу везде, от Маков до Смартфонов.


          1. 0x1000000
            30.04.2019 22:49

            … ради интранетовских сайтов, способных работать на всех устройствах
            Как раз интранетовские сайты склоны работать только под IE где blazor, увы, не взлетит.
            … И ЯваСкрипт тоже. И даже CSS
            Боюсь, что как минимум CSS выкинуть из головы не получится.
            … и работает, причём сразу везде, от Маков до Смартфонов
            а под IE нет — какой же интранет без IE? ))

            Для вашей ситуации я бы рассмотрел ASP.Net (может быть даже Forms), при большом желании можно обойтись и без JavaScript и работать точно будет везде.


            1. Uolis
              30.04.2019 23:11

              Как раз интранетовские сайты склоны работать только под IE

              Не понимаю откуда это утверждение.


              1. 0x1000000
                01.05.2019 13:23

                К сожалению, из личного опыта. Часто во внутрикорпоративных сетях достаточно много старого специализированного софта, который требует различных ActiveX, Java Applets, Silverlight и даже Flash, и соответственно, это все не будет работать в современных браузерах. Но софт со своими задачами справляется и гораздо проще продолжать использовать IE, чем пытаться найти замену этому софту.


  1. wrmax
    30.04.2019 08:27

    XBAP 2.0? =)


    1. FreeBa
      30.04.2019 09:58

      Даже близко нет. Микрософт учел недостатки сервелата, activeX и прочих поделок.
      Теперь все максимально приближенно к кросплатформенности. Времена когда можно будет сказать js прости-прощай — все ближе.


      1. msin
        30.04.2019 16:00

        Насколько я знаю, всё начиналось как хобби-проект энтузиаста в МС… Майкрософт выжидал более полугода и только потом взял этот проект под своё крылышко
        Поэтому фраза «Микрософт учел недостатки» не очень соответствует действительности


        1. FreeBa
          30.04.2019 17:05

          Возможно вы правы. Все всегда начинается с одного человека, но как минимум в 2017 над проектом уже работало несколько человек, в том числе и из команды ASP.NET.

          В любом случае «упихать» среду исполнения дотнета в менее чем 1Мб и довести все до состояния preview, на голом энтузиазме проблематично.


          1. msin
            30.04.2019 17:41

            Рантаймом .NET занимается Mono и делается это на деньги Майкрософта, команда ASP.NET вроде бы участия не принимает
            А вот про 1 МБ слышу первый раз… вроде бы пока меньше 4 МБ не получается


            1. FreeBa
              30.04.2019 19:44

              Речь не о всей команде asp.net, а о нескольких людях.

              А вот про 1 МБ слышу первый раз… вроде бы пока меньше 4 МБ не получается

              Так соберите дефолтное приложение из туториала и гляньте что грузится. Непосредственно сам mono.wasm весит 930Кб + 64Кб обвес (который mono.js).


              1. Zam_dev
                30.04.2019 22:26

                Тогда странно, что так долго грузится при первом запуске…


                1. medvedevia
                  01.05.2019 00:24

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


                1. FreeBa
                  01.05.2019 04:03

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


  1. Zam_dev
    30.04.2019 14:47

    А фраза Loading… имеет шанс на ускорение в перспективе?


    1. msin
      30.04.2019 15:17

      первый раз происходит загрузка рантайма Mono, он пока не очень оптимизирован по размеру…
      это однократная загрузка, данные кешируются и следующее обновление страницы работает без всяких задержек