Решил познакомится с интеграцией, все скачалось, установилось и скомпилировалось отлично, но при попытке открыть или создать Nemerle-проект сразу же наткнулся на баг.
Класс NemerleLanguageService не может проинициализироваться, если в текущий аппдомен загружены динамические сборки. Непосредственно ошибка возникает в конструкторе класса IntelliSenseModeLibraryReferenceManager, в строке, где он получает CodeBase сборок:
При обращении к assembly.CodeBase получаем ошибку:
assembly.CodeBase' threw an exception of type 'System.NotSupportedException'
base {System.SystemException}: {"The invoked member is not supported in a dynamic assembly."}
В итоге для пользователя все выливается в MessageBox
---------------------------
Microsoft Visual Studio
---------------------------
Value cannot be null.
Parameter name: languageService
---------------------------
ОК Отмена
---------------------------
, проекты немерле не загружаются, а также не проходят юнит-тесты интеграции.
Сборка, на которой код спотыкается, как-то относится к плагину RedGate SQL Propmt, установленному у меня. При его отключении все заработало нормально.
Здравствуйте, i1yich, Вы писали:
I>Решил познакомится с интеграцией, все скачалось, установилось и скомпилировалось отлично, но при попытке открыть или создать Nemerle-проект сразу же наткнулся на баг.
1. Речь идет об интеграции собранной из последних исходников?
2. Как воспроизвести проблему?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>1. Речь идет об интеграции собранной из последних исходников?
Конечно, судя по всему этот баг с самого начала там, в IntelliSenseModeLibraryReferenceManager.
VD>2. Как воспроизвести проблему?
Загрузить в аппдомен динамически генерируемую сборку, т.е. не загруженную из файла. Я на это наткнулся, потому что у меня установлен плагин, который использует динамические сборки.
При отключении плагина, использующего динамические сборки, интеграция более менее заработала, но по-прежнему у меня не проходят юнит-тесты.
Все как один тесты из проекта VSIntegration.nuint останавливаются на первом же ассерте при инициализации тесткейза в методе Test1.Init:
_project = _engine.Project;
Assert.IsNotNull(_project, "_project is null");
например:
Tests.Test1.Complete_2:
_project is null
Expected: not null
But was: null
Свойство Engine.Project почему-то всегда возвращает null. Куда копать?
Здравствуйте, i1yich, Вы писали:
VD>>2. Как воспроизвести проблему? I>Загрузить в аппдомен динамически генерируемую сборку, т.е. не загруженную из файла. Я на это наткнулся, потому что у меня установлен плагин, который использует динамические сборки.
А нельзя ли этот плгин поиметь, чтобы что называется "в боевых условиях" проблему лицезреть?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, i1yich, Вы писали:
I>При отключении плагина, использующего динамические сборки, интеграция более менее заработала, но по-прежнему у меня не проходят юнит-тесты.
Юнит-тесты пока проходить и не будут. В последнее время правка была столь объемная, что итеративное изменение юнит-тестов привело бы к морю непродуктивной работы.
Как только мы добьем функциональность и приступим к режиму тестирования и исправления багов, то восстановим все тесты (или напишем новые).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, i1yich, Вы писали:
I>Решил познакомится с интеграцией, все скачалось, установилось и скомпилировалось отлично, но при попытке открыть или создать Nemerle-проект сразу же наткнулся на баг. I>Класс NemerleLanguageService не может проинициализироваться, если в текущий аппдомен загружены динамические сборки. Непосредственно ошибка возникает в конструкторе класса IntelliSenseModeLibraryReferenceManager, в строке, где он получает CodeBase сборок: I>Сборка, на которой код спотыкается, как-то относится к плагину RedGate SQL Propmt, установленному у меня. При его отключении все заработало нормально.
Пофиксил в ревизии 8691 — просто пропускаю динамические сборки.
Эта же ошибка возникала при попытке добавить проект на Nemerle в солюшен, уже содержащий c# проекты. Здесь уже кто то жаловался на подобную проблему. Причина — к этому моменту в AppDomain обычно лежит динамическая сборка Com2InteropEmit, она и мешает загрузке. Кто ее создает — , возможно сама студия.