Алгоритмы кодогенерации
От: Андрей Корявченко Россия http://blogs.rsdn.org/avk
Дата: 17.09.03 10:18
Оценка: 1092 (18) +2
Статья:
Алгоритмы кодогенерации
Автор(ы): Андрей Корявченко
Дата: 19.03.2004
Данная статья рассказывает об одном из способов решения проблемы недостаточной гибкости и производительности средств, предоставляемых платформой Microsoft .NET — предварительной генерации кода. Рассматриваются различные подходы: использовании функции string.Format; использование XSLT-преобразований; использование ASP.NET; использование технологии CodeDOM для генерации кода на нескольких языках; компиляция кода во время выполнения программы; генерация IL-кода без компиляции.


Авторы:
Андрей Корявченко

Аннотация:
Данная статья рассказывает об одном из способов решения проблемы недостаточной гибкости и производительности средств, предоставляемых платформой Microsoft.NET – предварительной генерации кода. Рассматриваются различные подходы: использование функции string.Format; использование XSLT-преобразований; использование ASP.NET; использование технологии CodeDOM для генерации кода на нескольких языках; компиляция кода во время выполнения программы; генерация IL-кода без компиляции.
AVK Blog
Re: Алгоритмы кодогенерации
От: Andir Россия
Дата: 09.03.05 05:52
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

АК>Статья:

АК>Алгоритмы кодогенерации
Автор(ы): Андрей Корявченко
Дата: 19.03.2004
Данная статья рассказывает об одном из способов решения проблемы недостаточной гибкости и производительности средств, предоставляемых платформой Microsoft .NET — предварительной генерации кода. Рассматриваются различные подходы: использовании функции string.Format; использование XSLT-преобразований; использование ASP.NET; использование технологии CodeDOM для генерации кода на нескольких языках; компиляция кода во время выполнения программы; генерация IL-кода без компиляции.


private static AppDomain GetDomainForGenerator()
{

AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationName = "ASP.NET Generator";

AppDomain dom = AppDomain.CreateDomain("generator domain" , null, setup);

dom.SetData(".appPath", Directory.GetCurrentDirectory() +
Path.DirectorySeparatorChar);
dom.SetData(".appDomain", "*");
dom.SetData(".appVPath", "/");
dom.SetData(".domainId", dom.FriendlyName);
dom.SetData(".hostingVirtualPath", "/");
dom.SetData(".hostingInstallDir", HttpRuntime.AspInstallDirectory);

return dom;
}


Под вторым фрейморком не получается заставить это работать, выдаёт странное исключение по 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!
Re[2]: Алгоритмы кодогенерации
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.03.05 07:45
Оценка:
Здравствуйте, Andir, Вы писали:

A>Под вторым фрейморком не получается заставить это работать, выдаёт странное исключение по null-reference и всё


Там же кажется написано, что это злобный хак . Для работы под 2 фреймворком надо поизучать дизассемблером метод AppDomainFactory.Create. Видимо 2.0 требует каких то дополнительных переменных.

Но вобще то вроде бы как в 2.0 есть прямой механизм управления путями к директориям. См. к примеру интерфейс IApplicationHost.
... << RSDN@Home 1.1.4 beta 4 rev. 350>>
AVK Blog
Re[3]: Алгоритмы кодогенерации
От: Andir Россия
Дата: 09.03.05 08:07
Оценка:
Здравствуйте, AndrewVK, Вы писали:

A>>Под вторым фрейморком не получается заставить это работать, выдаёт странное исключение по null-reference и всё


AVK>Там же кажется написано, что это злобный хак .


Ну какой же это злобный хак, если фремворк сам так и поступает Ну это-то понятно. Просто во втором фреймворке, по версии 2.0.40607 директория bin тоже зашита

AVK>Для работы под 2 фреймворком надо поизучать дизассемблером метод AppDomainFactory.Create. Видимо 2.0 требует каких то дополнительных переменных.


Это я уже понял, переменные там вроде бы всё те же. Вот только отлаживать это чудо просто убойно, наощупь прям

AVK>Но вобще то вроде бы как в 2.0 есть прямой механизм управления путями к директориям. См. к примеру интерфейс IApplicationHost.


А вот это я не понял, спасибо покопаю, но вроде ничего подобного управлению там нет.

P.S. Это всё из-за http://msdn.microsoft.com/msdnmag/issues/04/12/ServiceStation/default.aspx этой статьи, интересная вроде вещь, но без bin или без GAC это тоже прилично не работает ...

С Уважением, Andir!
Re[4]: Алгоритмы кодогенерации
От: adontz Грузия http://adontz.wordpress.com/
Дата: 23.06.05 22:36
Оценка:
Здравствуйте, Andir, Вы писали:

Удалось ли разобраться с проблемами на втором фреймворке? Если да, то как?
Очень хорошая идея с использованием ASP.Net, но нужна совместимость со вторым фреймворком...
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[5]: Алгоритмы кодогенерации
От: Andir Россия
Дата: 24.06.05 00:11
Оценка:
Здравствуйте, adontz, Вы писали:

A>Удалось ли разобраться с проблемами на втором фреймворке? Если да, то как?


Максимум до чего я дошёл, это создание Внутри нового домена — HttpEnvironment объекта. Но его ещё нужно настроить, а все методы настройки internal. В принципе добраться с помощью рефлекшена можно, но я не стал .

С Уважением, Andir!
Re[6]: Алгоритмы кодогенерации
От: adontz Грузия http://adontz.wordpress.com/
Дата: 24.06.05 01:59
Оценка:
Здравствуйте, Andir, Вы писали:

A>Максимум до чего я дошёл, это создание Внутри нового домена — HttpEnvironment объекта. Но его ещё нужно настроить, а все методы настройки internal. В принципе добраться с помощью рефлекшена можно, но я не стал .


Мда, печально. И что главное всё это нигде не документированно.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Алгоритмы кодогенерации
От: vdimas Россия  
Дата: 07.09.05 17:51
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

АК>Статья:

АК>Алгоритмы кодогенерации
Автор(ы): Андрей Корявченко
Дата: 19.03.2004
Данная статья рассказывает об одном из способов решения проблемы недостаточной гибкости и производительности средств, предоставляемых платформой Microsoft .NET — предварительной генерации кода. Рассматриваются различные подходы: использовании функции string.Format; использование XSLT-преобразований; использование ASP.NET; использование технологии CodeDOM для генерации кода на нескольких языках; компиляция кода во время выполнения программы; генерация IL-кода без компиляции.


АК>Авторы:

АК> Андрей Корявченко

АК>Аннотация:

АК>Данная статья рассказывает об одном из способов решения проблемы недостаточной гибкости и производительности средств, предоставляемых платформой Microsoft.NET – предварительной генерации кода. Рассматриваются различные подходы: использование функции string.Format; использование XSLT-преобразований; использование ASP.NET; использование технологии CodeDOM для генерации кода на нескольких языках; компиляция кода во время выполнения программы; генерация IL-кода без компиляции.

Вдохновленные твоей статьей, решили применить ASP.Net-генератор для шаблонных файлов в нашей системе. Немного допилили напильником, ввели кеш доменов и т.д. и т.п.

Одна незадача — при возникновении исключения в процессе кодогенерации весь этот эксепшен аккурантенько рендерится в виде HTML.

Много излазил с Рефлектором, но похоже, придется делать копию метода HTTPRuntime::ProcessRequestInternal...

Нет ли какой информации об обработчиках ошибок для HTTPRuntime? Может, мы что-то упустили?
Re[2]: Алгоритмы кодогенерации
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.09.05 07:31
Оценка: :)
Здравствуйте, vdimas, Вы писали:

V>Нет ли какой информации об обработчиках ошибок для HTTPRuntime? Может, мы что-то упустили?


Не знаю. Я на практике этот способ не использую. Можешь поглядеть на CodeSmith, может там что есть. Или поковыряться с CustomErrorPage.
... << RSDN@Home 1.2.0 alpha rev. 610>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.