Re: ManagerClass и непонятки с интеграцией
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.10 11:32
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Интересные проблемы попались как раз там где я их не ждал, компиляция в рантайме, с которой у немерла как раз должно быть все прекрасно доставила больше всего хлопот.


Интеграция, тесты, компилятор и много других программ используют, так что точно работает. Там к сожалению не все так просто как хотелось бы. Надо бы написать специальную обертку для упрощения простого использования.

Z>1. ManagerClass, менеджед компилятор, при попытке скомпилировать сгенеренный файл вьюхи умудряется "беззвучно" положить ASP.NET'овский WebDev.WebServer.exe.


Начнем с того что беззвучно ничего не бывает. Бывают люди которые не умеют прислушиваться (с)
Когда кажется что приложение слетает беззвучно скорее всего имеет место некое системное исключение которое невозможно обработать из управления кода. Самым частым таким исключением является переполнение стека.

Чтобы его отловить нужно чтобы отладчик был подключен к процесса с опцией "Managed code, Native code". При подключении к процессу из диалога "Debug\Attach to process..." — это можно сделать явно.

Далее остается только выставить отлов все (в том числе не управляемых) исключений и дождаться вылета.

Ну, а закончим тем, что скорее ты запускаешь компилятор в 64-битной среде, где потребности к стеку в двое больше. В потоке с небольшим объемом стека совершенно реально получить переполнение стека и не имея ошибки в компиляторе.

Очень советую поглядеть на то как реализованы тесты:
http://nemerle.googlecode.com/svn/nemerle/trunk/ncc/testsuite/test.n (см. строки 758 и 327). Обрати внимание, что для компилятора создается отдельный поток с большим стеком!

Z>2. CodeDom работает, но выдает странные ворнинги, которые выдаются также компиляцией в .

Z>"Warning 1 assembly `F:\Dev\nemerleonrails\NRails\bin\Debug\NRails.dll' already loaded", конечно можно их фильтровать при компиляции в рантайме, но в IDE они раздражают. Откуда они и как от них избавиться?

Это сообщение означает, что к твоему проекту NRails.dll подключена два или более раза. Тут тебе надо разбираться с логикой подключения ДЛЛ-ей. Возможно дело в том, что по умолчанию используется опция GreedyReferences которая заставляет рекурсивно вынимать ссылки на сборки из всех подсборок. А возможно просто где-то ошибся и сборка грузится второй раз.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.