Моно взять mscorlib.dll 2.0 вместо 4.0

У меня проблема с приложением MONO, я пытаюсь скомпилировать проект (с помощью MonoDevelop), чтобы загрузить библиотеку запуска mscorlib.dll 4.0 вместо версии 2.0. (Мне нужен метод System.Type.op_Equality, который есть в версии 4.0, но не в 2.0).

Я временно решил, сделав ссылку:

# cd /usr/lib/mono/2.0
# mv mscorlib.dll mscorlib.dll.bak
# ln ../4.0/mscorlib.dll mscorlib.dll

Но, конечно, это не верное решение.

Кто-нибудь знает, как МОНО загрузить mscorlib 4.0 вместо 2.0?

Спасибо и извините за мой английский


person gokuhs    schedule 04.06.2012    source источник


Ответы (2)


Наконец я нашел решение этой проблемы:

https://bugs.launchpad.net/ubuntu/+source/gtk-sharp2/+bug/884035/comments/14

Просто измените файл «app.config» и измените содержимое для этого:

<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0"/></startup></configuration>

Перекомпилируйте проект и теперь работайте нормально.

person gokuhs    schedule 04.04.2013

Щелкните проект правой кнопкой мыши -> откройте страницу Build/General и убедитесь, что Target Framework имеет значение Mono / .NET 4.0:

введите здесь описание изображения

person Rolf Bjarne Kvinge    schedule 04.06.2012
comment
Спасибо, Рольф Бьярне, но теперь у меня есть такая конфигурация, и я все еще делаю то же самое. jesusanchez.net/instantanea2.png - person gokuhs; 04.06.2012
comment
простите мое невежество, но я не знаю, как сделать, чтобы monodevelop показывал мне вывод buld. Можете ли вы сказать мне, как я могу показать вывод? - person gokuhs; 04.06.2012
comment
@gokuhs: в меню Вид -> Прокладки -> Список ошибок. Теперь нажмите кнопку Build Output и перестройте свой проект. - person Rolf Bjarne Kvinge; 04.06.2012
comment
Спасибо за вашу помощь @rolf-bjarne-kvinge, это результат сборки: (извините на испанском языке) pastebin.com/hhtT6qfJ - person gokuhs; 04.06.2012
comment
@gokuhs: это правильно, он создает исполняемый файл 4.0. Какая именно проблема у вас возникла во время выполнения (т. е. как определить, что вы работаете в среде выполнения 2.0)? - person Rolf Bjarne Kvinge; 04.06.2012
comment
Спасибо за ответ, я знаю, потому что, если я запускаю приложение, не выполнив процедуру, описанную выше (создайте ссылку для перезаписи mscorlib.dll 2.0 и укажите на mscorlib.dll 4.0), приложение выдает следующее исключение:Метод не найдено: «System.Type.op_Equality». У меня возникла идея создать ссылку после прочтения этой темы: monotouch.2284126.n4.nabble.com/ (Теперь я понимаю, что вы тоже это заметили ;-)) - person gokuhs; 05.06.2012
comment
Читая исключение, я обнаружил следующее: Отсутствует метод System.Type::op_Equality(Type,Type) в сборке /usr/lib/mono/2.0/mscorlib.dll, указанный в сборке /usr/lib/mono/gac/gtk-sharp /2.12.0.0__35e10195dab3c99f/gtk-sharp.dll - person gokuhs; 05.06.2012
comment
попробуйте запустить это из командной строки и вставьте вывод: MONO_LOG_LEVEL=debug MONO_LOG_MASK=asm mono --debug yourapp.exe (все в одну строку) - person Rolf Bjarne Kvinge; 05.06.2012
comment
Ничего себе Спасибо за команду, я буду полезен позже! :-) это вывод: pastebin.com/tjUjGEr2 - person gokuhs; 05.06.2012
comment
Это очень странно. Можешь попробовать и эти: monodis --assemblyref yourapp.exe и mono --version? - person Rolf Bjarne Kvinge; 05.06.2012
comment
Это все более и более странно, нет причин, по которым моно загружает corlib 2.0, но это так :| Что напечатает эта программа: pastebin.com/hRKWcBii, если вы скомпилируете и запустите ее следующим образом: dmcs test.cs && mono test.exe? - person Rolf Bjarne Kvinge; 05.06.2012
comment
ммммм, ваш пример выглядит нормально: pastebin.com/adbxDqaj Возможно ли, что monodevelop использует копилятор Mono 2.0 (gmcs ) вместо 4.0 (dmcs)? РЕДАКТИРОВАТЬ: я пишу вашу строку в своей основной функции, это вывод: pastebin.com/XJnMeivm - person gokuhs; 05.06.2012
comment
Нет, MonoDevelop использует dmcs (как вы показали здесь: pastebin.com/hhtT6qfJ). Однако похоже, что у вас есть лишний файл mscorlib.dll в выходном каталоге. Можете ли вы удалить этот файл и снова запустить его из командной строки (чтобы MonoDevelop не копировал файл обратно)? - person Rolf Bjarne Kvinge; 05.06.2012
comment
Боюсь, у меня такая же проблема: pastebin.com/6PbQRRyA, может быть проект изначально был проект Visual Studio .NET? Если ничего не получится, попробую переустановить моно (удалив пакеты) - person gokuhs; 05.06.2012
comment
Я не верю, что это проблема с моно, а с вашим проектом. Что произойдет, если вы создадите новый проект с нуля/шаблона? Это работает так, как ожидалось? - person Rolf Bjarne Kvinge; 05.06.2012
comment
Мммм, да, если я создам новый проект, он будет работать нормально, теперь я попытаюсь создать новый проект и переместить код из старого проекта в новый проект. - person gokuhs; 05.06.2012
comment
Закончил копировать проект на новый, теперь работает исправно, спасибо за помощь! - person gokuhs; 05.06.2012
comment
@gokuhs я думаю, вы должны принять этот ответ. Как работает принятие ответа?. - person dschulz; 06.06.2012