Аннотация:
Данная статья рассказывает об одном из способов решения проблемы недостаточной гибкости и производительности средств, предоставляемых платформой Microsoft.NET – предварительной генерации кода. Рассматриваются различные подходы: использование функции string.Format; использование XSLT-преобразований; использование ASP.NET; использование технологии CodeDOM для генерации кода на нескольких языках; компиляция кода во время выполнения программы; генерация IL-кода без компиляции.
Под вторым фрейморком не получается заставить это работать, выдаёт странное исключение по null-reference и всё
[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.CachedPathData.GetPathData(String path) +363
System.Web.CachedPathData.GetPathData(String path) +275
System.Web.HttpContext.GetFilePathData() +26
System.Web.HttpContext.GetConfigPathData() +16
System.Web.Configuration.CustomErrorsSection.GetSettings(HttpContext context, Boolean canThrow) +89
System.Web.HttpResponse.ReportRuntimeError(Exception e, Boolean canThrow, Boolean localExecute) +98
System.Web.HttpRuntime.FinishRequest(HttpWorkerRequest wr, HttpContext context, Exception e) +438
Если сборку запихнуть в bin и создать по старому, то всё получается ... А через домен ну никак. Где-то каких-то данных не хватает, но никак не могу определить каких.
Никто не пытался повторить такое на .Net Framework 2.0 Beta?
Здравствуйте, Andir, Вы писали:
A>Под вторым фрейморком не получается заставить это работать, выдаёт странное исключение по null-reference и всё
Там же кажется написано, что это злобный хак . Для работы под 2 фреймворком надо поизучать дизассемблером метод AppDomainFactory.Create. Видимо 2.0 требует каких то дополнительных переменных.
Но вобще то вроде бы как в 2.0 есть прямой механизм управления путями к директориям. См. к примеру интерфейс IApplicationHost.
Здравствуйте, AndrewVK, Вы писали:
A>>Под вторым фрейморком не получается заставить это работать, выдаёт странное исключение по null-reference и всё
AVK>Там же кажется написано, что это злобный хак .
Ну какой же это злобный хак, если фремворк сам так и поступает Ну это-то понятно. Просто во втором фреймворке, по версии 2.0.40607 директория bin тоже зашита
AVK>Для работы под 2 фреймворком надо поизучать дизассемблером метод AppDomainFactory.Create. Видимо 2.0 требует каких то дополнительных переменных.
Это я уже понял, переменные там вроде бы всё те же. Вот только отлаживать это чудо просто убойно, наощупь прям
AVK>Но вобще то вроде бы как в 2.0 есть прямой механизм управления путями к директориям. См. к примеру интерфейс IApplicationHost.
А вот это я не понял, спасибо покопаю, но вроде ничего подобного управлению там нет.
Удалось ли разобраться с проблемами на втором фреймворке? Если да, то как?
Очень хорошая идея с использованием ASP.Net, но нужна совместимость со вторым фреймворком...
Здравствуйте, adontz, Вы писали:
A>Удалось ли разобраться с проблемами на втором фреймворке? Если да, то как?
Максимум до чего я дошёл, это создание Внутри нового домена — HttpEnvironment объекта. Но его ещё нужно настроить, а все методы настройки internal. В принципе добраться с помощью рефлекшена можно, но я не стал .
Здравствуйте, Andir, Вы писали:
A>Максимум до чего я дошёл, это создание Внутри нового домена — HttpEnvironment объекта. Но его ещё нужно настроить, а все методы настройки internal. В принципе добраться с помощью рефлекшена можно, но я не стал .
Мда, печально. И что главное всё это нигде не документированно.
АК>Авторы: АК> Андрей Корявченко
АК>Аннотация: АК>Данная статья рассказывает об одном из способов решения проблемы недостаточной гибкости и производительности средств, предоставляемых платформой Microsoft.NET – предварительной генерации кода. Рассматриваются различные подходы: использование функции string.Format; использование XSLT-преобразований; использование ASP.NET; использование технологии CodeDOM для генерации кода на нескольких языках; компиляция кода во время выполнения программы; генерация IL-кода без компиляции.
Вдохновленные твоей статьей, решили применить ASP.Net-генератор для шаблонных файлов в нашей системе. Немного допилили напильником, ввели кеш доменов и т.д. и т.п.
Одна незадача — при возникновении исключения в процессе кодогенерации весь этот эксепшен аккурантенько рендерится в виде HTML.
Много излазил с Рефлектором, но похоже, придется делать копию метода HTTPRuntime::ProcessRequestInternal...
Нет ли какой информации об обработчиках ошибок для HTTPRuntime? Может, мы что-то упустили?