В целом у меня возникли трудности с переносом моих приложений .NET Windows Forms, созданных в Visual Studio 2008, на Mono/Linux. Проблема в том, что иногда некоторые типы текста не отображаются; там, где я ожидаю увидеть текст, просто пустота или неразборчивые знаки. На одной машине с Ubuntu весь текст отображался правильно, за исключением текста в диалоговых окнах из MessageBox.Show, который выглядел как крошечные неразборчивые черные метки. На другом компьютере с Ubuntu эта же программа работала нормально. Но затем я обновил эту машину с Ubuntu 9.4 до 9.10: теперь текст флажков и меток не отображается, но текст внутри текстовых полей и меток вкладок отображается.
Когда вы переносите приложение в Mono/Linux и у вас возникают проблемы с отображением текста, как вы его отлаживаете? Каковы ваши общие стратегии?
Я пропускаю шрифты, и как мне выяснить, какие шрифты отсутствуют?
В частности: я создал небольшую программу в Visual Studio, в которой был элемент управления вкладками с двумя вкладками и меткой на каждой. Он отлично работает в Visual Studio, но в Mono/Linux текст вкладок отображается, а текст меток не отображается.
Я использую Ubuntu 9.10 и установил следующие соответствующие пакеты: mono-gmcs libusb-1.0-0-dev mono-2.0-devel libmono-winforms2.0-cil.
Вот команда, которую я использовал для компиляции программы:
gmcs -unsafe -debug -target:exe -out:EventTest.exe
./Form1.cs ./Form1.Designer.cs ./Program.cs
-r:/usr/lib/mono/2.0/System.dll
-r:/usr/lib/mono/2.0/System.Core.dll
-r:/usr/lib/mono/2.0/System.Drawing.dll
-r:/usr/lib/mono/2.0/System.Windows.Forms.dll
Когда я запустил его с MONO_LOG_LEVEL=DEBUG, я получил несколько сообщений об ошибках:
(./EventTest.exe:8395): Mono-WARNING **: The request to load the assembly
mscorlib v1.0.5000.0 was remapped to v2.0.0.0
(./EventTest.exe:8395): Mono-WARNING **: The request to load the assembly
System.Windows.Forms v1.0.5000.0 was remapped to v2.0.0.0
(./EventTest.exe:8427): Mono-WARNING **: DllImport unable to load library
'lib/System/Library/Frameworks/Carbon.framework/Versions/Current/Carbon:
cannot open shared object file: No such file or directory'.
Почему он пытается загрузить версию 1.0, если я явно скомпилирован с версией 2.0? Почему он пытается загрузить Carbon (разве это не проблема Max OS?) Я приведу весь журнал, если вы хотите его увидеть.
Также было сообщение журнала о невозможности найти «libgdi32». Я добавляю символическую ссылку, используя приведенную ниже команду, и это удаляет сообщение об ошибке, но, похоже, не влияет на другие проблемы приложения.
sudo ln -s /usr/lib/wine/gdi32.dll.so /usr/lib/libgdi32.so