Содержание
- 2. Что за «Code hot reload»? Обновление кода приложения без перезапуска этого приложения. .NET Framework (4.6 +)
- 3. DirectumRX – ECM-система
- 4. DirectumRX Development Studio
- 5. Прикладная разработка DirectumRX Development Studio (IDE) Локальный сервер приложений Код платформы (framework) Прикладной код Новый прикладной
- 6. Зачем нам HotReload Development Studio (IDE) Локальный сервер приложений Код платформы (framework) Прикладной код Новый прикладной
- 7. Дополнительные ограничения и пожелания Если поменялась структура БД, одним HotReload не обойтись. HotReload и отладка в
- 8. Основная идея Избавиться от перезапуска сервера. Встраивать код напрямую в работающее приложение. Development Studio (IDE) Локальный
- 9. Решения в лоб Reflection – LoadAssembly (Shadow Copy Assemblies) Managed Extensibility Framework (MEF, VS-MEF) Mono.Cecil
- 10. Решения в лоб. Проблемы Не повлияем на уже существующие в памяти объекты. Новые объекты, создаваемые через
- 11. Emit CodeDom – компиляция С# в Assembly сразу в память в AppDomain. Emit – генерация IL-кода.
- 12. Emit. Проблемы Emit работает только с DynamicAssembly. А при компиляции CodeDom’a мы получаем обычную Assembly. Чтобы
- 13. Edit and Continue Встроенный в Visual Studio хитрый механизм, генерирующий некоторые дельты. Общедоступного API нет. Даже
- 15. Method Inject v1
- 16. Method Inject v1 Суть – замена указателя на метод. MethodInfo methodToReplace = … ; MethodInfo methodToInject
- 17. Как хранятся описания классов в .NET Заголовок MethodTable ptr Field value 1 Field value 2 …
- 18. Method Inject v1. Суть Заголовок MethodTable ptr Field value 1 Field value 2 … ObjectInstance …
- 19. Method Inject v1. Проверяем на практике Есть два класса… Target TargetMethod() Injection InjectionMethod() Injector
- 20. Method Inject v1. Проверяем на практике Исходный MethodTable TestClasses.Target.Test() TestClasses.Target.TargetMethod() TestClasses.Target.get_Value() TestClasses.Target..ctor (System.String) WinDbg + SOS
- 21. Method Inject v1. Проверяем на практике MethodTable после Inject TestClasses.Target.Test() TestClasses.Injection.InjectionMethod() TestClasses.Target.get_Value() TestClasses.Target..ctor (System.String)
- 22. Method Inject v1. Дополнительные работы Сравнить прикладные исходники и найти изменившиеся методы. Передать исходники методов на
- 23. Method Inject v1. ПРОБЛЕМА! Прекрасно работает пока мы не вызвали подменяемый метод.
- 24. Method Inject v1. ПРОБЛЕМА! …. Code ptr … … …. MyMethod1() ptr … MethodTable { Console.WriteLine(1);
- 25. Method Inject v2
- 26. Method Inject v2 public static class InjectionHelper { ... public static void Initialize() public static void
- 27. Method Inject v2 …. Code ptr … … …. MyMethod1() ptr … MethodTable IL MethodDesc Stub
- 28. Injector …. Code ptr … … …. MyMethod1() ptr … MethodTable IL MethodDesc Stub PreJitStub machine
- 29. Method Inject v2. Проблемки Нормально заработало только на .NET Framework 2.0 - 4.0 Inline маленьких методов.
- 30. Давайте вспомним, с чего мы начали Есть платформа. Она исполняет прикладной код. Мы хотим подменять прикладной
- 31. Что за прикладной код? Document Name Author Created … ServerHandlers BeforeSave() AfterSave() … ServerFunctions ServerFoo() …
- 32. Class swap Платформенный код создаёт прикладные объекты (Dependency Injection). Не возимся с методами – заменяем сразу
- 33. Class swap Document1 Document1ServerFunctions Foo() IDocument1ServerFunctions AppTypesManager Implementation Create ServerFunctions ()
- 34. Class swap … Document1 Document1ServerFunctions Foo() IDocument1ServerFunctions AppTypesManager Create ServerFunctions () Injector Create type C# sources
- 35. Class swap Document1 Document1ServerFunctions Foo() IDocument1ServerFunctions Document1ServerFunctions Foo() IDocument1ServerFunctions AppTypesManager Implementation Create ServerFunctions () Injector Create
- 36. Заключение В продакшен это не пошло :( Деплой мы ускорили иначе – оптимизации. Исследования – круто.
- 37. () .net core JIT disable Custom .NET CLR
- 38. THE END Асадуллин Тимур Directum, Уфа [email protected]
- 40. Скачать презентацию