Проблемы с использованием mkbundle для создания автономного приложения с GTK - PullRequest
0 голосов
/ 09 мая 2019

Я хотел бы сообщить об этой проблеме сообществу переполнения стека, чтобы узнать, может ли кто-нибудь дать мне информацию о том, как решить эту проблему.Основная цель здесь - использовать инструмент Mono mkbundle для создания автономного двоичного файла, который будет выполняться во встроенной системной среде без моно (или связанных библиотек).

Project code example

Приложение, которое я использую, представляет собой небольшой пример, который просто загружает окно.На этом изображении вы можете увидеть зависимости, которые я настроил, чтобы включить локальные копии для всех них.Это означает, что и. dll этих ссылок, и их dll map config будут присутствовать в папке отладки вместе с исполняемым файлом.Следует также отметить, что если я не включу локальные копии зависимостей, команда mkbundle не будет выполнена.

Поэтому я пытаюсь выполнить mkbundle с помощью этой команды:

mkbundle -o App App..exe --simple --deps --machine-config "/usr/etc/etc/mono/4.5/machine.config" --config "/etc/mono/config"

После чего мне представляется этот многообещающий отчет о связанных сборках и библиотеках:

   Assembly: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/Graphics.exe
 Assembly: /usr/lib/mono/4.5/mscorlib.dll
 Assembly: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/gtk-sharp.dll
   Config: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/gtk-sharp.dll.config
 Assembly: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/glib-sharp.dll
   Config: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/glib-sharp.dll.config
 Assembly: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/System.dll
 Assembly: /usr/lib/mono/4.5/System.Configuration.dll
 Assembly: /usr/lib/mono/4.5/System.Xml.dll
 Assembly: /usr/lib/mono/4.5/System.Security.dll
 Assembly: /usr/lib/mono/4.5/System.Core.dll
 Assembly: /usr/lib/mono/4.5/System.Numerics.dll
 Assembly: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/gdk-sharp.dll
   Config: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/gdk-sharp.dll.config
 Assembly: /usr/lib/mono/4.5/Mono.Cairo.dll
 Assembly: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/pango-sharp.dll
   Config: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/pango-sharp.dll.config
 Assembly: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/atk-sharp.dll
   Config: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/atk-sharp.dll.config
 Assembly: /home/tansvanio/Projects/Graphics/Graphics/bin/Debug/Mono.Posix.dll
 Assembly: /usr/lib/mono/4.5/I18N.West.dll
 Assembly: /usr/lib/mono/4.5/I18N.dll

systemconfig: / etc / mono / config machineconfig: /usr/etc/mono/4.5/machine.config

Как мы видим, не только DLL-файлы из исходной моно-карты в / etc / mono / config , где они связаны, но также и те, которые нужны нашим зависимостям gtk.

После этого я попытаюсь запустить сгенерированный двоичный файл.

./App

И приложение вылетает и выдает мне эту ошибку:

Unhandled Exception:
System.TypeLoadException: Could not set up parent class, due to: Could not 
set up parent class, due to: Could not set up parent class, due to: Could 
not set up parent class, due to: Could not set up parent class, due to: 
Could not set up parent class, due to: Could not set up parent class, due 
to: Could not load type of field 'GLib.Object:before_handlers' (15) due to: 
Could not load file or assembly 'System, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089' or one of its dependencies. assembly:glib- 
sharp.dll type:Object member:(null) assembly:glib-sharp.dll 
type:InitiallyUnowned member:(null) assembly:gtk-sharp.dll type:Object 
member:(null) assembly:gtk-sharp.dll type:Widget member:(null) assembly:gtk- 
sharp.dll type:Container member:(null) assembly:gtk-sharp.dll type:Bin 
member:(null) assembly:gtk-sharp.dll type:Window member:(null)
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not set 
up 
parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not load type of field 'GLib.Object:before_handlers' (15) due to: Could not load file or assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. assembly:glib-sharp.dll type:Object member:(null) assembly:glib-sharp.dll type:InitiallyUnowned member:(null) assembly:gtk-sharp.dll type:Object member:(null) assembly:gtk-sharp.dll type:Widget member:(null) assembly:gtk-sharp.dll type:Container member:(null) assembly:gtk-sharp.dll type:Bin member:(null) assembly:gtk-sharp.dll type:Window member:(null)

Это действительно расстраивает, потому что я пробовал этот процесснесколько раз и подтвердил, что он работает для небольших приложений без ссылок.Интересно, сталкивался ли кто-нибудь с этой проблемой раньше и знает, как это исправить или сделать это правильно, если у меня что-то не получается.

С уважением, Рикардо

...