Добавил поддержку дизайнера веб форм
От: seregaa Ниоткуда http://blogtani.ru
Дата: 05.03.10 22:05
Оценка: 171 (3)
Ревизия 8558.

Теперь по двойному клику по контролу для него автоматически сгенерируется обработчик умолчального события. Также можно генерировать обработчики и навешивать их на события в проперти гриде дизайнера. Думаю, что на этом можно считать реализацию поддержки дизайнера для WebApplication проектов завершенной. Пора приступать к отлову и исправлению багов

По ходу дела пришлось переписать реализацию CodeModel (Nemerle.VisualStudio.FileCodeModel) — взял ее практически 1к1 от железного питона, добавив поддержку вариантов и переписав методы get_signature — они используются source outliner-ом. Пришлось на это пойти из за того, что дизайнер работает через CodeModel, и для генерации кода она должна быть two-way, т.е. изменения исходного кода должны отображаться на модели и наоборот — изменения модели — отображаться на код. А модель, реализованная в интеграции, была только однонаправленной — все методы, меняющие модель представляли собой затычки с NotImplementedException, т.е. модель была read-only. Начав прикручивать возможность ее изменения я понял, что проще передрать реализацию заново, что и сделал.

По ходу старался сохранить специфику, написанную в старой реализации под особенности Немерле, надеюсь мне это удалось. Насколько я понял, эти изменения затронули только дизайнер веб форм и source outliner. Дизайнер виндовс форм по моему работает напрямую с CompileUnit, поэтому он сломаться не должен был. Я его погонял немного — вроде все Ok. Кстати, не смог найти способа запустить source outliner, поэтому проверить его не получилось.

Еще заметил, что шаблоны проекта WebApplication не включались в инсталлятор — это тоже пофиксил.

Дизайнер форм можно протестировать только на полной студии. Shell не умеет работать с проектами типа WebApplication, а шаблон для WebSite я еще не дописал. Кто нибудь пробовал создавать такие проекты вручную? — у меня при компиляции WebSite проекта появляются ошибки:

Error 5 `override' specified on method ASP.default_aspx.FrameworkInitialize() : void, but there is no such member in parent to override "C:\Users\Sergey\Documents\Visual Studio 2008\WebSites\WebSite1\Default.aspx.n"
Error 6 `override' specified on method ASP.default_aspx.GetTypeHashCode() : int, but there is no such member in parent to override C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website1\47a1ea9c\5a951934\App_Web_hacwp2ya.0.n 313
Error 7 `override' specified on method ASP.default_aspx.ProcessRequest(context : System.Web.HttpContext) : void, but there is no such member in parent to override C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website1\47a1ea9c\5a951934\App_Web_hacwp2ya.0.n 319
Error 8 unimplemented interface method System.Web.IHttpHandler.get_IsReusable() : bool (in ASP.default_aspx type) C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website1\47a1ea9c\5a951934\App_Web_hacwp2ya.0.n 124


а вот кусок файла, сгенерированного аспнетом (App_Web_hacwp2ya.0.n):

    public class default_aspx : _Default,  System.Web.IHttpHandler 
    {

...        
        #line 912304 "C:\Users\Sergey\Documents\Visual Studio 2008\WebSites\WebSite1\Default.aspx.n"
        [System.Diagnostics.DebuggerNonUserCodeAttribute]
        protected override FrameworkInitialize () : void
        {
            base.FrameworkInitialize();
            this.__BuildControlTree(this);
            this.AddWrappedFileDependencies(ASP.default_aspx.__fileDependencies);
            this.Request.ValidateInput();
        }
...


непонятно, почему негенерировались эти методы (FrameworkInitialize() etc). Вобщем, буду разбираться.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.