🗊Презентация HotReload кода C# другим кодом C#

Категория: Информатика
Нажмите для полного просмотра!
HotReload кода C# другим кодом C#, слайд №1HotReload кода C# другим кодом C#, слайд №2HotReload кода C# другим кодом C#, слайд №3HotReload кода C# другим кодом C#, слайд №4HotReload кода C# другим кодом C#, слайд №5HotReload кода C# другим кодом C#, слайд №6HotReload кода C# другим кодом C#, слайд №7HotReload кода C# другим кодом C#, слайд №8HotReload кода C# другим кодом C#, слайд №9HotReload кода C# другим кодом C#, слайд №10HotReload кода C# другим кодом C#, слайд №11HotReload кода C# другим кодом C#, слайд №12HotReload кода C# другим кодом C#, слайд №13HotReload кода C# другим кодом C#, слайд №14HotReload кода C# другим кодом C#, слайд №15HotReload кода C# другим кодом C#, слайд №16HotReload кода C# другим кодом C#, слайд №17HotReload кода C# другим кодом C#, слайд №18HotReload кода C# другим кодом C#, слайд №19HotReload кода C# другим кодом C#, слайд №20HotReload кода C# другим кодом C#, слайд №21HotReload кода C# другим кодом C#, слайд №22HotReload кода C# другим кодом C#, слайд №23

Содержание

Вы можете ознакомиться и скачать презентацию на тему HotReload кода C# другим кодом C#. Доклад-сообщение содержит 23 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





HotReload кода C#
Другим кодом C#
Описание слайда:
HotReload кода C# Другим кодом C#

Слайд 2





Прикладная разработка DirectumRX
Описание слайда:
Прикладная разработка DirectumRX

Слайд 3





Зачем нам HotReload
Быстрая локальная отладка прикладного кода.
Обычный deploy хорош и надёжен для прода, но медленный из-за перезапуска сервера.
Описание слайда:
Зачем нам HotReload Быстрая локальная отладка прикладного кода. Обычный deploy хорош и надёжен для прода, но медленный из-за перезапуска сервера.

Слайд 4





Дополнительные ограничения и требования
Не спасёт, если поменялась структура БД.
Надо, чтобы при Hot Reload могла работать отладка в Dev Studio.
Хорошо бы, чтобы можно использовать не только для серверного кода, но и для клиента (который уже запущен).
Описание слайда:
Дополнительные ограничения и требования Не спасёт, если поменялась структура БД. Надо, чтобы при Hot Reload могла работать отладка в Dev Studio. Хорошо бы, чтобы можно использовать не только для серверного кода, но и для клиента (который уже запущен).

Слайд 5





Основная идея 
Избавиться от перезапуска сервера.
Делаем на стороне сервера точку (контроллер WebApi, например), которая встроит поданный код в работающее приложение.
Описание слайда:
Основная идея Избавиться от перезапуска сервера. Делаем на стороне сервера точку (контроллер WebApi, например), которая встроит поданный код в работающее приложение.

Слайд 6





Решения в лоб
Возня с reflection – LoadAssembly (в т. ч. Shadow Copy Assemblies).
Managed Extensibility Framework (MEF); в том числе VS-MEF.
Mono.Cecil.
Описание слайда:
Решения в лоб Возня с reflection – LoadAssembly (в т. ч. Shadow Copy Assemblies). Managed Extensibility Framework (MEF); в том числе VS-MEF. Mono.Cecil.

Слайд 7





Решения в лоб. Проблемы
Никак не повлияем на уже существующие в памяти объекты,
Новые объекты, создаваемые через new в прикладном коде будут ссылаться на старые типы.
Чтобы это работало нужно:
писать свой загрузчик типов. Если где-то в прикладном коде какая-то прикладная сущность создаётся через new, то придётся модифицировать прикладной код (это плохо);
в случае с MEF по коду надо либо раскидывать специальные атрибуты, либо наследоваться от нужных интерфейсов.
Описание слайда:
Решения в лоб. Проблемы Никак не повлияем на уже существующие в памяти объекты, Новые объекты, создаваемые через new в прикладном коде будут ссылаться на старые типы. Чтобы это работало нужно: писать свой загрузчик типов. Если где-то в прикладном коде какая-то прикладная сущность создаётся через new, то придётся модифицировать прикладной код (это плохо); в случае с MEF по коду надо либо раскидывать специальные атрибуты, либо наследоваться от нужных интерфейсов.

Слайд 8





Компилять на сервере и Emit (v1)
CodeDom – компиляция c# в Assembly сразу в память в AppDomain.
Emit – генерация IL-кода.
Описание слайда:
Компилять на сервере и Emit (v1) CodeDom – компиляция c# в Assembly сразу в память в AppDomain. Emit – генерация IL-кода.

Слайд 9





Компилять на сервере и Emit
Проблемы:
Emit работает только с DynamicAssembly (соответстввенно – DynamicMethod). А в результатет работы CodeDom и компиляции мы получаем, по сути, обычную Assembly.
Чтобы динамический класс отправить в работу, нужно вызвать у него CreateType(). Это блокирует дальнейшие его модификации
Описание слайда:
Компилять на сервере и Emit Проблемы: Emit работает только с DynamicAssembly (соответстввенно – DynamicMethod). А в результатет работы CodeDom и компиляции мы получаем, по сути, обычную Assembly. Чтобы динамический класс отправить в работу, нужно вызвать у него CreateType(). Это блокирует дальнейшие его модификации

Слайд 10





Edit and Continue
Встроенный в Visual Studio хитрый механизм, генерирующий некоторые дельты.
Общедоступного API нет.
Даже в самой VS механизм не работает в ряде случаев.
Описание слайда:
Edit and Continue Встроенный в Visual Studio хитрый механизм, генерирующий некоторые дельты. Общедоступного API нет. Даже в самой VS механизм не работает в ряде случаев.

Слайд 11





­Method inject v1
Замена указателя на метод:
Описание слайда:
­Method inject v1 Замена указателя на метод:

Слайд 12





Как хранятся описания классов в .NET
Описание слайда:
Как хранятся описания классов в .NET

Слайд 13





Суть Method Inject v1
Описание слайда:
Суть Method Inject v1

Слайд 14





­Method inject (v1)
Описание слайда:
­Method inject (v1)

Слайд 15





Method Inject v1. Что нам надо сделать ещё
Сравнить прикладные исходники и найти изменившиеся методы.
Передать исходные тексты методов (+ доп. инфа) на сервер
Создать новый класс, засунуть в него методы и скомпилировать в память
(Перед компиляцией надо заменить вcе обращения к this на обращения через Reflection)
Найти старый метод и сделать MethodInject на новый
Описание слайда:
Method Inject v1. Что нам надо сделать ещё Сравнить прикладные исходники и найти изменившиеся методы. Передать исходные тексты методов (+ доп. инфа) на сервер Создать новый класс, засунуть в него методы и скомпилировать в память (Перед компиляцией надо заменить вcе обращения к this на обращения через Reflection) Найти старый метод и сделать MethodInject на новый

Слайд 16





Method Inject v1. ПРОБЛЕМА!
Прекрасно работает, пока мы не вызываем метод.
После первого вызова срабатывает JIT и вся магия пропадает.
Описание слайда:
Method Inject v1. ПРОБЛЕМА! Прекрасно работает, пока мы не вызываем метод. После первого вызова срабатывает JIT и вся магия пропадает.

Слайд 17





Method Inject v2
Использование EasyHook
Основная идея:
Переопределение compileMethod,
Сброс состояния Jitted с помощью MethodDesc.Reset()
Описание слайда:
Method Inject v2 Использование EasyHook Основная идея: Переопределение compileMethod, Сброс состояния Jitted с помощью MethodDesc.Reset()

Слайд 18





Method Inject v2. Проблемки
Нормально заработало только на .NET Framework 3.5.
Уж очень рискованно такое применять в продакшене.
Поддерживать такое от версии к версии .NET – хз, как, потому что влезли конкретно внутрь кухни CLR
Описание слайда:
Method Inject v2. Проблемки Нормально заработало только на .NET Framework 3.5. Уж очень рискованно такое применять в продакшене. Поддерживать такое от версии к версии .NET – хз, как, потому что влезли конкретно внутрь кухни CLR

Слайд 19





Что за прикладной код
Описание слайда:
Что за прикладной код

Слайд 20





Class swap
Платформенный код создаёт объекы, содержащие прикладной код.
Зачем менять изворачиваться с методами, если можно просто подсунуть объект
Описание слайда:
Class swap Платформенный код создаёт объекы, содержащие прикладной код. Зачем менять изворачиваться с методами, если можно просто подсунуть объект

Слайд 21





Сlass swap. Работающий прототип
Описание слайда:
Сlass swap. Работающий прототип

Слайд 22





Мораль
Исследования – офигенная тема
Правильно, что не стали бросаться делать первое попавшееся.
Нужно смотреть шире. Упёрлись в подмену кода на низком уровне.
Документирование исследования – вообще тема.
Фича не забыта и может быть когда-нибудь...
Описание слайда:
Мораль Исследования – офигенная тема Правильно, что не стали бросаться делать первое попавшееся. Нужно смотреть шире. Упёрлись в подмену кода на низком уровне. Документирование исследования – вообще тема. Фича не забыта и может быть когда-нибудь...

Слайд 23


HotReload кода C# другим кодом C#, слайд №23
Описание слайда:



Похожие презентации
Mypresentation.ru
Загрузить презентацию