Pull to refresh

OpenSilver. Воскрешаем Silverlight

Reading time3 min
Views8.9K

12 октября Майкрософт прекращает поддержку Silverlight. С одной стороны - ок, все равно никто им уже не пользуется. А с другой, выясняется, что есть много компаний, которые 10+ лет назад написали свои внутренние продукты на Silverlight и успешно все это время работают. А сейчас нет ни людей, знакомых с бизнес логикой этих приложений, ни времени/возможности/знаний все это переписать с нуля.

Мы попытались бросить соломинку таким компаниям и выпустили OpenSilver - бесплатную  опенсорс реализацию Silverlight, которая работает во всех современных браузерах через WebAssembly.

Что под капотом?

У нас есть компилятор, который преобразует XAML в C# код. И есть движок, который генерирует html+css и js (для обновления dom), чтобы отобразить UI в браузере. Вся логика, весь IL код выполняется на WebAssembly. Чтобы упростить работу с WebAssembly, мы используем Blazor фреймворк.

Соответственно, если Silverlight работает сейчас только в IE 11, то OpenSilver версия работает везде, кроме IE11.

Особенно хочу подчеркнуть, что в отличие от некоторых современных продуктов, мы НЕ рисуем интерфейс на canvas.

Примеры

Самый базовый пример - https://opensilvershowcase.azurewebsites.net/ . Здесь можно посмотреть на разные контролы, компоненты, фичи с исходниками.

https://opensilvertelerik.azurewebsites.net/ - Telerik UI. Это набор контролов от Telerik. Тут видно, что какие-то элементы смигрировались отлично, с какими-то есть сложности при отображении и надо разбираться/фиксить движок.

На всякий случай: чтобы пользоваться Telerik библиотекой нужна лицензия. Telerik предоставляет исходный код компонентов. Именно поэтому мы можем пересобрать библиотеку под OpenSilver.

Кстати, все сторонние зависимости надо пересобирать под OpenSilver. С учетом того, что 10 лет назад, особенно для Silverlight библиотек, был очень популярен CodePlex, то бывает сложно найти даже опенсорс исходники :)

А как запустить?

Нам потребуется Visual Studio 2019 16.11+, OpenSilver SDK, .NET 5 или .NET 6 RC1+.

  1. Устанавливаем скачанный vsix.

  2. Создаем в Visual Studio новое OpenSilver приложение.

  3. Запускаем Browser проект и убеждаемся, что Hello World приложение работает.

Если вы хотите пописать интерфейс на XAML, то все готово. Вы можете смело разрабатывать .NET приложение под веб с интерфейсом на XAML.

Если хотите смигрировать Silverlight приложение, то добавляем в созданный проект OpenSilver class library, куда включаем имеющиеся файлы вашего приложения. Пробуем скомпилировать. Не факт, что получится. Если падает из-за зависимостей от сторонних библиотек, то проверяем нету ли в NuGet уже готовых. Мы смигрировали и разместили некоторые библиотеки. Если в NuGet нету, то ищем исходники и пересобираем под OpenSilver.

Возможно, вы столкнетесь с тем, что некоторые API еще не реализованы. Придется временно закомментировать, чтобы хотя бы запустить проект.

За помощью можно обращаться в документацию, в гитхаб репозиторий. Разработка активно ведется. PRs are welcome :)

Текущее состояние

Проект в бета версии. Есть успешно смигрированные приложения. Какие-то редко используемые Silverlight-фичи не покрыты, но мы регулярно добавляем.

Сейчас активно работаем над быстродействием. Удалось достигнуть невероятных успехов, особенно по сравнению с версией годовалой давности. Скорость увеличена больше чем в 10 раз. Одно из направлений работы для быстродействия - Ahead Of Time компиляция. С AOT компиляцией получается увеличить скорость еще в 2-3 раза, но при этом очень сильно увеличивается размер загружаемого приложения. На некоторых проектах доходит до 300-400 мб, даже с учетом тримминга. С одной стороны, это небольшая проблема для внутренних порталов, к тому же эта загрузка только первый раз, потом все из кэша. Но такие большие приложения сказываются и на потреблении памяти. Как вариант, тут можно поработать над триммингом еще.

Заключение

Не стоит рассматривать проект только как замену Silverlight. Это также отличный вариант попробовать написать что-нибудь под Web для опытных десктоп разработчиков, которые привыкли к XAML и C#. Знание js, html, css абсолютно не нужно. Но будет неплохим плюсом, если хотите поделать какие-то кастомные “низкоуровневые” компоненты.

P.S. Я знаю, что Silverlight недолюбливают, особенно в ру интернете. Предлагаю этот вопрос не обсуждать :) Есть инструмент, у инструмента есть пользователи. Мы хотим им помочь.

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 24: ↑23 and ↓1+22
Comments19

Articles