Второй день пытаюсь перевести один MVC3 проект на Немерле. Много проблем уже решил, но теперь столкнулся с такой, с которой не знаю что делать.
При компиляции проекта вылезает такой эксепшен:
D:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(219,9): error : internal compiler error: got ArgumentException (NList.Iter2)
at Nemerle.Collections.NList.Iter2[T,TOut](list`1 a, list`1 b, FunctionVoid`2 f)
at Nemerle.Compiler.ILEmitter.GetMethodInfo(TypeVar from_type, IMethod meth, list`1 typars)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.emit_exprs_push(LocalBuilder[] local_variables, list`1 exprs)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.emit_exprs_push(LocalBuilder[] local_variables, list`1 exprs)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.emit_debug_info(DebugInfo di)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.emit_debug_info(DebugInfo di)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.emit(TExpr expr)
at Nemerle.Compiler.ILEmitter.Run()
at Nemerle.Compiler.MethodBuilder._N__N_lambda__66308__66416.apply_void()
at Nemerle.Compiler.TypeBuilder.BeforeFinalizeType()
at Nemerle.Compiler.TypeBuilder.EmitImplementation()
at Nemerle.Compiler.TypesManager._N_emit_impl__59299.apply_void(TypeBuilder ti)
at Nemerle.Compiler.TypesManager._N_maybe_f__59544.apply_void(TypeBuilder ti)
at Nemerle.Collections.NList.Iter[T](list`1 l, FunctionVoid`1 f)
at Nemerle.Compiler.TypesManager.Iter(list`1 builders, FunctionVoid`1 f)
at Nemerle.Compiler.TypesManager.compile_all_tyinfos(Boolean aux_phase)
at Nemerle.Compiler.TypesManager._N__N_lambda__58721__58825.apply_void()
at Nemerle.Compiler.Solver.Enqueue(FunctionVoid action)
at Nemerle.Compiler.ManagerClass.Run()
at Nemerle.CommandlineCompiler.MainClass.main_with_catching()
В проекте используются C# файлы.(которым, кстати, надо было выставить build action: compile, чего я сначала не знал...)
Здравствуйте, Маслаков Михаил, Вы писали:
ММ>Второй день пытаюсь перевести один MVC3 проект на Немерле. Много проблем уже решил, но теперь столкнулся с такой, с которой не знаю что делать. ММ>При компиляции проекта вылезает такой эксепшен: ММ> ММ>D:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(219,9): error : internal compiler error: got ArgumentException (NList.Iter2) ММ> at Nemerle.Collections.NList.Iter2[T,TOut](list`1 a, list`1 b, FunctionVoid`2 f) ММ> at Nemerle.Compiler.ILEmitter.GetMethodInfo(TypeVar from_type, IMethod meth, list`1 typars) ММ>
Информации недостаточно. Нужно под отладчиком смотреть.
Компилятор и интеграция собраны из исходников?
Есть ли возможность оформить отдельный проект и послать его мне по почте?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Маслаков Михаил, Вы писали:
ММ>>Второй день пытаюсь перевести один MVC3 проект на Немерле. Много проблем уже решил, но теперь столкнулся с такой, с которой не знаю что делать. ММ>>При компиляции проекта вылезает такой эксепшен: ММ>> ММ>>D:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(219,9): error : internal compiler error: got ArgumentException (NList.Iter2) ММ>> at Nemerle.Collections.NList.Iter2[T,TOut](list`1 a, list`1 b, FunctionVoid`2 f) ММ>> at Nemerle.Compiler.ILEmitter.GetMethodInfo(TypeVar from_type, IMethod meth, list`1 typars) ММ>>
VD>Информации недостаточно. Нужно под отладчиком смотреть.
VD>Компилятор и интеграция собраны из исходников?
VD>Есть ли возможность оформить отдельный проект и послать его мне по почте?
1. Компилятор и интеграция взяты из последней ветки Кочеткого Владимира для 4 фреймворка.
2. К сожалению проект не публичный, прислать не могу. Попробую изолировать проблему, хотя не знаю с какой стороны подступиться
Здравствуйте, hardcase, Вы писали:
H>Вызвать в отладчик в любом удобном месте:
assert2(false)
Далее цеплять студию (винда предложит, либо самостоятельно) и отлаживать как обычно.
Я тут подумал, а что если в ncc добавить опцию командной строки, которая будет делать assert2(false).
Таким образом, можно будет легко запускать компилятор на отладку.
Достаточно будет выставить в опциях проекта галочку.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, ionoy, Вы писали:
I>1. Компилятор и интеграция взяты из последней ветки Кочеткого Владимира для 4 фреймворка.
В смысле, используется готовый инсталлятор?
I>2. К сожалению проект не публичный, прислать не могу. Попробую изолировать проблему, хотя не знаю с какой стороны подступиться
I>Каким образом можно дебужить компиляцию?
Здравствуйте, WolfHound, Вы писали:
WH>Я тут подумал, а что если в ncc добавить опцию командной строки, которая будет делать assert2(false). WH>Таким образом, можно будет легко запускать компилятор на отладку. WH>Достаточно будет выставить в опциях проекта галочку.
Опция компилятора такая есть — "-debugger". В проектном файле она задается через установку свойства RunDebugger в True. Вот только в ГУИ ее выставить нельзя (никто не реализовал). Можно только проектный файл править.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Привет,
В общем я собрал компилятор, предварительно удалив всё старое, теперь ошибка другая:
C:\Program Files (x86)\Nemerle\Nemerle.MSBuild.targets(219,9): error : Internal compiler error 'cannot reflect `System.Array'', please report a bug to bugs.nemerle.org. You can try modifying program near this location.
C:\Program Files (x86)\Nemerle\Nemerle.MSBuild.targets(219,9): error : internal compiler error: assertion failed in file ncc\external\InternalTypes.n, line 164: cannot reflect `System.Array'
at Nemerle.Compiler.SystemTypeClass.Reflect(String type_name)
at Nemerle.Compiler.SystemTypeClass.Init()
at Nemerle.Compiler.ManagerClass._N__N_lambda__26748__26911.apply_void()
at Nemerle.Compiler.ManagerClass._N_tryEx_26771(_N_closure_26755 _N_LoadExternalLibraries_cp_26770, FunctionVoid f)
at Nemerle.Compiler.ManagerClass.LoadExternalLibraries()
at Nemerle.Compiler.ManagerClass.Run()
at Nemerle.CommandlineCompiler.MainClass.main_with_catching() in c:\dev\!\nemerle\nemerle\ncc\main.n:line 82
Предыдущее исключение я так и не смог пока поймать, потому что компилятор отказался собираться второй раз. Там каким-то образом произошёл конфликт между 1.0.0.269 и 1.0.0.270 версиями. Может быть, это потому что я отдельно собирал инсталлер. Сейчас, к сожалению дальше разбираться нет времени
Вообще такое ощущение, что это исключение связано с References, у нас в проекте много чего добавлено из разных версий фреймворков. Сам проект на 4.0.
Здравствуйте, ionoy, Вы писали:
I>Привет, I>В общем я собрал компилятор, предварительно удалив всё старое, теперь ошибка другая:
I>C:\Program Files (x86)\Nemerle\Nemerle.MSBuild.targets(219,9): error : Internal compiler error 'cannot reflect `System.Array'',
Это у тебя что-то не так со сборками. Такое сообщение, обычно, появляется когда невозможно загрузить Nemerle.dll. Скорее всего у тебя каша из сборок или что-то не так собралось.
Вот краткая инструкция что должно быть и как делать.
На машине должно стоять:
1. VS 2010 Prof+.
2. SP1 для VS 2010.
3. VS 2010 SDK SP1.
4. Последние исходники с гитхаба.
Нужно:
1. Запустить нечто из под чего можно осуществлять сборку под экаунтом администратора (обычно Total Commander или FAR). Это что-то должно быть запущено от имени администратора (в контекстом меную пункт Run as Administrator). Данный пункт не нужен под ХРюшей.
2. Надо закрыть все копии VS.
3. Зайти в каталог с исходниками и запустить DevBuildQuick-4.cmd.
4. Дождаться окончания сборки. При этом не должно быть никаких сообщений об ошибках (выделяется красным).
5. Открыть солюшен Nemerle\snippets\VS2010\Nemerle.VS2010.sln и пересобрать его (Rebuild).
6. Прописать в отладку (свойства проекта) к проекту Nemerle.VisualStudio.csproj отлаживаемым приложением devenv.exe (у меня, C:\VS\VS-2010\Common7\IDE\devenv.exe). В аргументах командной строки указать "/rootSuffix Exp".
7. Нажать F5 и дождаться запуска новой копии студии.
В этой копии студии будет работать интеграция в отладочном режиме. Исходная студия сможет перехватывать исключения и производить другую отладку.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, ionoy, Вы писали:
I>Предыдущее исключение я так и не смог пока поймать, потому что компилятор отказался собираться второй раз. Там каким-то образом произошёл конфликт между 1.0.0.269 и 1.0.0.270 версиями. Может быть, это потому что я отдельно собирал инсталлер. Сейчас, к сожалению дальше разбираться нет времени
Инсталлятор вообще не нужно собирать. Только DevBuildQuick-4.cmd. При этом запускать его нужно из под админа (под Вынь7 и Вистой).
I>Вообще такое ощущение, что это исключение связано с References, у нас в проекте много чего добавлено из разных версий фреймворков. Сам проект на 4.0.
То что ты имеешь сейчас — это какая-то каша из сборок. Сначала нужно правильно собрать и запустить игтеграцию. Своих изменений на этом этапе не вноси. Добейся работоспособности интеграции, а уже потом будешь дальше что-то делать.
Можешь постучаться ко мне на скайп (VladD2) и я тебе в интерактивном режиме помогу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, ionoy, Вы писали:
VD>Нужно: VD>1. Запустить нечто из под чего можно осуществлять сборку под экаунтом администратора (обычно Total Commander или FAR). Это что-то должно быть запущено от имени администратора (в контекстом меную пункт Run as Administrator). Данный пункт не нужен под ХРюшей. VD>2. Надо закрыть все копии VS. VD>3. Зайти в каталог с исходниками и запустить DevBuildQuick-4.cmd. VD>4. Дождаться окончания сборки. При этом не должно быть никаких сообщений об ошибках (выделяется красным). VD>5. Открыть солюшен Nemerle\snippets\VS2010\Nemerle.VS2010.sln и пересобрать его (Rebuild). VD>6. Прописать в отладку (свойства проекта) к проекту Nemerle.VisualStudio.csproj отлаживаемым приложением devenv.exe (у меня, C:\VS\VS-2010\Common7\IDE\devenv.exe). В аргументах командной строки указать "/rootSuffix Exp". VD>7. Нажать F5 и дождаться запуска новой копии студии.
Маленькое замечание, еще нужно после перекомпиляции компилятора, переинсталлировать плагин студии, или скопировать все файлы из bin\debug\.net-4.0\VsIntegration в папку где лежит плагин:
C:\Users\Username\AppData\Local\Microsoft\VisualStudio\10.0\Extensions\Nemerle Team\Nemerle Visual Studio 2010 Integration\1.0\
или в другой ОС в аналогичной папке
если в плагине старые dll ки они тоже могут не давать скомпилировать
Здравствуйте, VladD2, Вы писали:
I>>Вообще такое ощущение, что это исключение связано с References, у нас в проекте много чего добавлено из разных версий фреймворков. Сам проект на 4.0.
VD>То что ты имеешь сейчас — это какая-то каша из сборок. Сначала нужно правильно собрать и запустить игтеграцию. Своих изменений на этом этапе не вноси. Добейся работоспособности интеграции, а уже потом будешь дальше что-то делать.
Если поискать на форуме, то можно найти сообщение ziaw-а о том, что mvc3 не поддерживается.
Я не знаю, изменилось ли что-то с тех пор. Тогда он написал, что mvc3 по всей видимости тянет за собой сборки от 2-го фреймворка, а винегрет из разных версий не поддерживается.
Оригинальное сообщeние здесь
Здравствуйте, CodingUnit, Вы писали:
VD>>6. Прописать в отладку (свойства проекта) к проекту Nemerle.VisualStudio.csproj отлаживаемым приложением devenv.exe (у меня, C:\VS\VS-2010\Common7\IDE\devenv.exe). В аргументах командной строки указать "/rootSuffix Exp". VD>>7. Нажать F5 и дождаться запуска новой копии студии.
CU>Маленькое замечание, еще нужно после перекомпиляции компилятора, переинсталлировать плагин студии, или скопировать все файлы...
Это нужно делать только, если есть желание использовать интеграцию в основной (не экспериментальной) ветке.
Если интеграция нужна только для отладки, то указанных мной шагов достаточно.
Регистрация в экспериментальной ветке происходит при пересборке проекта.
Кроме того можно создать себе шорткат для devenv.exe с опциями командной строки "/rootSuffix Exp" и запускать экспериментальную ветку без отладки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, YF, Вы писали:
YF>Если поискать на форуме, то можно найти сообщение ziaw-а о том, что mvc3 не поддерживается. YF>Я не знаю, изменилось ли что-то с тех пор. Тогда он написал, что mvc3 по всей видимости тянет за собой сборки от 2-го фреймворка, а винегрет из разных версий не поддерживается. YF>Оригинальное сообщeние здесь
Ну, вроде как товарищь и пытается наладить работу mvc3. В любом случае выяснение подробностей упростит работу тем кто будет делать реализацию поддержки mvc3 в будущем. Так что труды не будут напрасными.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, ionoy, Вы писали:
VD>Инсталлятор вообще не нужно собирать. Только DevBuildQuick-4.cmd. При этом запускать его нужно из под админа (под Вынь7 и Вистой).
Инсталлятор я собирал в процессе поиска правильного решения. Всё, перечисленное веткой выше я сделал, и в какой-то момент у меня даже всё правильно заработало и вылетело оригинальное исключение. Но когда я попробовал пересобрать компилятор под 4 фреймворк мне посыпались ошибки, видимо всвязи с 269/270 конфликтом.
К сожалению в ближайшие пару дней продолжить процесс не смогу, но как только опять засяду, то обязательно постучусь в скайп, если снова встречу нечто подобное.
Идея была по быстрому перевести MVC проект на Nemerle, чтобы использовать все плюшки NRails, ну и вообще, понравился мне этот язык. Но сейчас уже время поджимает, придётся пока продолжать на C#. На следующей неделе попробую снова разобраться, хотя там наверху пишут, что с MVC3 не получиться пока запустить. В общем, посмотрим.
В общем, мне удалось изолировать проблему.
Возникает она при использовании 4 фреймворка и добавлении в проект *.cs файла, например, следующего содержания:
A.cs
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1
{
public class A
{
public IEnumerable<T> B<T>(IEnumerable<T> source)
{
return source.Select(i => i);
}
}
}
Если комментируем Select(), то ошибка исчезает. Докопаться до сути, не смог, у меня почему-то сбиваются локейшены, когда я дебужу. Такое ощущение, что компилятор запускается Release, хотя я всё сделал так, как описал Влад чуть выше.
Ещё раз текст исключения:
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(219,9): error : internal compiler error: got ArgumentException (NList.Iter2)
at Nemerle.Collections.NList.Iter2[T,TOut](list`1 a, list`1 b, FunctionVoid`2 f) in c:\dev\nemerle\nemerle\lib\list.n:line 995
at Nemerle.Compiler.ILEmitter.GetMethodInfo(TypeVar from_type, IMethod meth, list`1 typars) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 384
at Nemerle.Compiler.ILEmitter.emit(TExpr expr) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 1466
at Nemerle.Compiler.ILEmitter.emit_exprs_push(LocalBuilder[] local_variables, list`1 exprs) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 1689
at Nemerle.Compiler.ILEmitter.emit_exprs(list`1 exprs) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 1642
at Nemerle.Compiler.ILEmitter.emit_parms(list`1 parms) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 423
at Nemerle.Compiler.ILEmitter.emit(TExpr expr) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 1156
at Nemerle.Compiler.ILEmitter.emit_exprs_push(LocalBuilder[] local_variables, list`1 exprs) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 1689
at Nemerle.Compiler.ILEmitter.emit_exprs(list`1 exprs) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 1642
at Nemerle.Compiler.ILEmitter.emit_parms(list`1 parms) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 423
at Nemerle.Compiler.ILEmitter.emit(TExpr expr) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 1216
at Nemerle.Compiler.ILEmitter.emit_debug_info(DebugInfo di) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 1717
at Nemerle.Compiler.ILEmitter.emit(TExpr expr) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 1627
at Nemerle.Compiler.ILEmitter.emit(TExpr expr) in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 801
at Nemerle.Compiler.ILEmitter.Run() in c:\dev\nemerle\nemerle\ncc\generation\ILEmitter.n:line 117
at Nemerle.Compiler.MethodBuilder._N__N_lambda__66321__66429.apply_void() in c:\dev\nemerle\nemerle\ncc\generation\HierarchyEmitter.n:line 856
at Nemerle.Compiler.TypeBuilder.BeforeFinalizeType() in c:\dev\nemerle\nemerle\ncc\hierarchy\TypeBuilder.n:line 1765
at Nemerle.Compiler.TypeBuilder.FinalizeType() in c:\dev\nemerle\nemerle\ncc\hierarchy\TypeBuilder.n:line 1771
at Nemerle.Compiler.TypeBuilder.EmitImplementation() in c:\dev\nemerle\nemerle\ncc\generation\HierarchyEmitter.n:line 678
at Nemerle.Compiler.TypesManager._N_emit_impl__59421.apply_void(TypeBuilder ti) in c:\dev\nemerle\nemerle\ncc\generation\HierarchyEmitter.n:line 370
at Nemerle.Compiler.TypesManager._N_maybe_f__59656.apply_void(TypeBuilder ti) in c:\dev\nemerle\nemerle\ncc\hierarchy\TypesManager.n:line 258
at Nemerle.Collections.NList.Iter[T](list`1 l, FunctionVoid`1 f) in c:\dev\nemerle\nemerle\lib\list.n:line 926
at Nemerle.Core.list`1.Iter(FunctionVoid`1 f) in c:\dev\nemerle\nemerle\lib\list.n:line 318
at Nemerle.Compiler.TypesManager.Iter(list`1 builders, FunctionVoid`1 f) in c:\dev\nemerle\nemerle\ncc\hierarchy\TypesManager.n:line 265
at Nemerle.Compiler.TypesManager.Iter(FunctionVoid`1 f) in c:\dev\nemerle\nemerle\ncc\hierarchy\TypesManager.n:line 276
at Nemerle.Compiler.TypesManager.compile_all_tyinfos(Boolean aux_phase) in c:\dev\nemerle\nemerle\ncc\generation\HierarchyEmitter.n:line 402
at Nemerle.Compiler.TypesManager._N__N_lambda__58843__58947.apply_void() in c:\dev\nemerle\nemerle\ncc\generation\HierarchyEmitter.n:line 240
at Nemerle.Compiler.Solver.Enqueue(FunctionVoid action) in c:\dev\nemerle\nemerle\ncc\typing\Solver.n:line 201
at Nemerle.Compiler.TypesManager.EmitDecls() in c:\dev\nemerle\nemerle\ncc\generation\HierarchyEmitter.n:line 260
at Nemerle.Compiler.ManagerClass.Run() in c:\dev\nemerle\nemerle\ncc\passes.n:line 609
at Nemerle.CommandlineCompiler.MainClass.main_with_catching() in c:\dev\nemerle\nemerle\ncc\main.n:line 82
Здравствуйте, ionoy, Вы писали:
I>В общем, мне удалось изолировать проблему. I>Возникает она при использовании 4 фреймворка и добавлении в проект *.cs файла, например, следующего содержания:
I>A.cs
I>
I>using System;
I>using System.Collections.Generic;
I>using System.Linq;
I>namespace ConsoleApplication1
I>{
I> public class A
I> {
I> public IEnumerable<T> B<T>(IEnumerable<T> source)
I> {
I> return source.Select(i => i);
I> }
I> }
I>}
I>
I>Если комментируем Select(), то ошибка исчезает. Докопаться до сути, не смог, у меня почему-то сбиваются локейшены, когда я дебужу. Такое ощущение, что компилятор запускается Release, хотя я всё сделал так, как описал Влад чуть выше.
ОК, починим. Добавь, плиз, issue и кинь сюда ссылку.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, ionoy, Вы писали:
I>Если комментируем Select(), то ошибка исчезает. Докопаться до сути, не смог, у меня почему-то сбиваются локейшены, когда я дебужу. Такое ощущение, что компилятор запускается Release, хотя я всё сделал так, как описал Влад чуть выше.
А, если заменить Select на Map, то ошибка остается?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>А, если заменить Select на Map, то ошибка остается?
Исчезает, проект компилируется успешно.
Правда Map подчёркивается красным с примерно текстом "type arguments for list<To> Map<From, To>(.....) cannot be inferred from the usage .........."