Как правило, У меня были проблемы с переносом приложений .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