2015-07-26 2 views
1

Я собирал небольшое приложение в Mono с помощью Gtk #. Это мое первое приложение Gtk # + Mono, но я развиваюсь с .NET Framework в течение достаточного количества времени.Моно приложение, скомпилированное под Linux, не работает в Windows

Конечная цель приложения заключается в том, чтобы он запускался на всех трех основных платформах (хотя у меня есть только 2 для тестирования). До сих пор я достиг этой цели вид.

Иногда я разрабатываю под Linux, иногда под Windows. Обе системы имеют Mono 4.0.2 с последним Gtk #. Тем не менее, существует расхождение между компиляцией Linux exe и скомпилированным exe-файлом Windows.

Я использую тот же .sln при компиляции, синхронизированный через git (GitHub, если быть точным, если это имеет значение). Конкретные параметры включают

  • Target Gtk # Версия: 2,12 Вт/Gettext поддержка (Mono.Unix.Catalog мой класс Gettext, загрузчик ресурсов класс Gdk.Pixbuf)
  • Целевые рамки: Mono/.NET 4.5. Используя механизм msbuild, цель компиляции - Executable w/GUI, выбран значок Win32.
  • x86 Целевая

Я строю под Linux: успешная сборка, без ошибок, работает отлично под Linux. Размер файла 142 kb. Это важно. Еще одно замечание: под Windows у него нет значка (это значок программы по умолчанию).

Затем я создаю тот же источник, те же настройки, под Windows: размер файла 228kb, есть значок, работает нормально.

Когда я запустил exe Linux, он говорит: «LuaModuleManager.exe перестает работать». «Дополнительные сведения» заключается в следующем:

Problem signature: 
    Problem Event Name: CLR20r3 
    Problem Signature 01: luamodulemanager.exe 
    Problem Signature 02: 0.7.0.6 
    Problem Signature 03: 0 
    Problem Signature 04: LuaModuleManager 
    Problem Signature 05: 0.7.0.6 
    Problem Signature 06: 0 
    Problem Signature 07: f 
    Problem Signature 08: 13 
    Problem Signature 09: System.IO.FileNotFoundException 
    OS Version: 6.1.7601.2.1.0.256.1 
    Locale ID: 1033 
    Additional Information 1: 0a9e 
    Additional Information 2: 0a9e372d3b4ad19135b953a78882e789 
    Additional Information 3: 0a9e 
    Additional Information 4: 0a9e372d3b4ad19135b953a78882e789 

Это действительно интересно что это System.IO.FileNotFoundException. Кажется, я не могу понять, что это за жизнь.

Еще одна вещь, которую следует отметить: Скомпилированные exe-файлы Windows отлично работают в Windows и Linux, но Linux-сборник exe работает только в Linux. И вызывает ошибку «LuaModuleManager.exe перестала работать».

Так что может быть проблемой? Загрузка в виртуальную машину Windows (или перезагрузка всей моей системы, чтобы перейти на мою установку Windows) - это немного неудобство только для компиляции и выталкивания новой сборки программы.

ответ

2

Поскольку вы используете Mono.Unix.Catalog, тогда ваш проект должен ссылаться на сборку Mono.Posix.

Проблема, вероятно, в том, что в Windows только Mono.Posix 2.0.0.0 устанавливается с GTK # 2.12.

В Linux у вас будут как Mono.Posix 2.0.0.0, так и 4.0.0.0, а когда вы скомпилируете проект .NET 4 с xbuild в Linux, он будет использовать Mono.Posix 4.0.0.0, который скомпилирован с .NET 4.0 , вместо Mono.Posix 2.0.0.0, который скомпилирован против .NET 2.0.

Об этой проблеме есть open bug.

В идеале установщик GTK # для Windows будет включать Mono.Posix 4.0.0.0, но в настоящее время он этого не делает.

+0

Я вижу, так что будет временное решение до тех пор? Я просто искал, что такое gettext, и если это для перевода, должно быть безопасно отключить gettext, потому что мое приложение не использует никаких переводов. – MrMiketheripper

+0

Методы обхода: 1) не использовать Mono.Posix. 2) Попробуйте ссылаться на определенную версию (2.0.0.0) - не уверен, что это сработает. 3) Разверните Mono.Posix с вашим приложением. –

+1

Я не снял gettext и удалил все ссылки на Mono.Posix. Теперь все работает, просто пожелать, чтобы иконописи собирались в Linux. Спасибо! – MrMiketheripper

Смежные вопросы