Вопрос

Я пытаюсь использовать MKBundle, чтобы я мог распространять приложение GTK# без необходимости установить .NET/MONO или GTK#. Я успешно связал приложение, которое использует Winforms, но по какой -то причине, когда я делаю то же самое с приложением GTK#, оно не сработает.

Это то, что я получаю из Cygwin:

$ mkbundle --deps a.exe OS is: Windows Sources: 1 Auto-dependencies: True

Неправленное исключение: System.io.filenotFoundException: не удалось загрузить файл или сборку 'gtk-sharp' или одну из его зависимостей. Система не может найти указанный файл.
Имя файла: 'gtk-sharp'
at system.appdomain.load (System.Reflection.AssemblyName AssemblyRef, System.Security.Policy.Evidence Assemblysecurity) [0x00000] В: 0
AT (wrapper remoting-invoke-with-ceck) System.appdomain: Load (System.Reflection.assemblyName, System.security.policy.evidence)
at system.appdomain.load (System.Reflection.assemblyName AssemblyRef) [0x00000] в: 0
at (wrapper remoting-invoke-with-ceck) System.appdomain: Load (System.Reflection.assemblyName)
at System.Reflection.assembly.load (System.Reflection.AssemblyName AssemblyRef) [0x00000] в: 0
at at makebundle.queueassembly (system.collections.arraylist files, System.string Codebase) [0x00000] В: 0
at makebundle.main (system.string [] args) [0x00000] в: 0
ОШИБКА] Фатальное невозможное исключение: System.io.filenotFoundException: не может загрузить файл или сборку 'GTK-Sharp' или одну из его зависимостей. Система не может найти указанный файл.
Имя файла: 'gtk-sharp'
at system.appdomain.load (System.Reflection.AssemblyName AssemblyRef, System.Security.Policy.Evidence Assemblysecurity) [0x00000] В: 0
AT (wrapper remoting-invoke-with-ceck) System.appdomain: Load (System.Reflection.assemblyName, System.security.policy.evidence)
at system.appdomain.load (System.Reflection.assemblyName AssemblyRef) [0x00000] в: 0
at (wrapper remoting-invoke-with-ceck) System.appdomain: Load (System.Reflection.assemblyName)
at System.Reflection.assembly.load (System.Reflection.AssemblyName AssemblyRef) [0x00000] в: 0
at at makebundle.queueassembly (system.collections.arraylist files, System.string Codebase) [0x00000] В: 0
at makebundle.main (system.string [] args) [0x00000] в: 0`

Но все же у меня есть/cyggrive/c/gtksharp/2.12/lib в переменной моего пути. Я могу проверить это, как будто я набираю «gtk-sharp.dll» в Cygwin, я получаю следующее возвращение:

$ gtk-sharp.dll bash: /cygdrive/c/GtkSharp/2.12/lib/gtk-sharp-2.0/gtk-sharp.dll: cannot execute binary file

Так что он должен быть в состоянии найти файл!

Любая помощь приветствуется.

Это было полезно?

Решение

Я нашел сценарий оболочки, который делает все это и изменил его до последних версий, по состоянию на май 2013 года вы можете просто использовать сценарий следующим образом:

https://gist.github.com/tebjan/5581296

1.) Установите Cygwin и убедитесь, что вы выбрали следующие пакеты:-GCC-Mingw-PKG-Config-Mingw-Zlib1-Mingw-Zlib-Devel

2.) Установите пакет выпуска Mono: «Моно для Windows, GTK#и XSP»

3.) Загрузите сценарий. Поместите его, кроме вашего приложения, и измените его в соответствии с вашей средой (внимательно прочитайте комментарии в файле).

4.) Откройте Cygwin и перейдите в выходную папку вашего приложения, где лежат Ececutable и Scipt, например, yourproject/bin/release

5.) выполнить скрипт с помощью команды: ./mkbundle_cygwin.sh

Устранение неполадок: если ваш исполняемый файл не работает, убедитесь, что оригинальное приложение .NET работает на моно. Вы можете проверить это, позвонив в Mono.exe и передайте свое приложение .NET или установив XamarinStudio и запустив свой проект оттуда (заставьте Mono в качестве времени выполнения).

Другие советы

Хорошо, я не знаю, является ли это реальным решением, но я только что скопировал сборки из C: gtksharp 2.12 lib gtk-sharp-2.0 до c: mono-2,10.5 lib mono 4.0 и и Теперь, кажется, связывает ОК, используя следующие шаги:

mkbundle -c -o host.c -oo bundle.o --deps app.exe

nano host.c

Измените следующее с:

#ifdef _WIN32
#include <windows.h>
#endif`

к

#ifdef _WIN32
#include <windows.h>
#endif
#undef _WIN32

И наконец:

gcc -mno-cygwin -o bundled.exe -Wall host.c `pkg-config --cflags --libs mono-2|dos2unix` bundle.o

Это сработало для меня. Хотя мне также нужно было скопировать машину. Config от c: mono-2.10.5 etc mono 4.0 в каталог, где находится мое приложение и передавать-machine-config machine.config to mkbundle.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top