Question

Je suis en train d'utiliser mkbundle pour que je puisse distribuer une application GTK # sans que les utilisateurs ayant besoin d'installer .NET / Mono ou GTK #. J'ai empaqueté avec succès une application qui utilise WinForms, mais pour une raison quelconque quand je fais la même chose avec une application GTK # il ne fonctionnera pas.

est ce que je sors de Cygwin:

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

Exception non gérée: System.IO.FileNotFoundException: Impossible de charger le fichier ou l'assembly « dièse gtk » ou une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.
Nom du fichier: 'gtk-sharp'
à System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity) [0x00000] dans: 0
à (wrapper-remoting Invoke avec vérification) System.AppDomain: Charge (System.Reflection.AssemblyName, System.Security.Policy.Evidence)
à System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] dans: 0
à (wrapper-remoting Invoke avec vérification) System.AppDomain: Charge (System.Reflection.AssemblyName)
à System.Reflection.Assembly.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] dans: 0
à MakeBundle.QueueAssembly (fichiers System.Collections.ArrayList, codebase System.String) [0x00000] dans: 0
à MakeBundle.Main (System.String [] args) [0x00000] dans: 0
[ERREUR] MORTEL Exception non gérée: System.IO.FileNotFoundException: Impossible de charger le fichier ou l'assembly « gtk-sharp » ou une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.
Nom du fichier: 'gtk-sharp'
à System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity) [0x00000] dans: 0
à (wrapper-remoting Invoke avec vérification) System.AppDomain: Charge (System.Reflection.AssemblyName, System.Security.Policy.Evidence)
à System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] dans: 0
à (wrapper-remoting Invoke avec vérification) System.AppDomain: Charge (System.Reflection.AssemblyName)
à System.Reflection.Assembly.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] dans: 0
à MakeBundle.QueueAssembly (fichiers System.Collections.ArrayList, codebase System.String) [0x00000] dans: 0
à MakeBundle.Main (System.String [] args) [0x00000] en: 0 '

Mais pourtant je /cygdrive/c/GtkSharp/2.12/lib dans ma variable PATH. Je peux vérifier, comme si je tape « gtk-sharp.dll » dans Cygwin Je reçois le texte suivant retourné:

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

Il doit donc être en mesure de trouver le fichier!

Toute aide serait très appréciée.

Était-ce utile?

La solution

J'ai trouvé un script shell qui fait tout cela et a modifié les dernières versions, que de mai 2013, vous pouvez simplement utiliser le script comme suit:

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

.

1) Installez Cygwin et assurez-vous que vous sélectionnez les packages suivants: - gcc-MinGW - pkg-config - MinGW-Zlib1 - MinGW-zlib-devel

2) Installez le package de version Mono:. "Mono pour Windows, Gtk #, et XSP"

3.) Télécharger le lieu de script, il en plus de votre application et le modifier pour l'adapter à votre environnement (lire les commentaires dans le fichier attentivement).

4.) Cygwin Ouvrir et naviguer dans le dossier de sortie de votre application où le ececutable et les mensonges SCIPT, par exemple YourProject / bin / Release

5) Exécuter le script avec la commande:. ./Mkbundle_cygwin.sh

Résolution des problèmes: Si votre exécutable fourni ne fait pas de travail que l'application .NET originale fonctionne sur mono. Vous pouvez vérifier que en appelant mono.exe et passer votre application .NET ou en installant XamarinStudio et l'exécution de votre projet à partir de là (vous faire mono jeu comme moteur d'exécution).

Autres conseils

OK Je ne sais pas si cela est une vraie solution, mais je viens de copier les assemblées de C: \ GtkSharp \ 2.12 \ lib \ gtk-sharp-2.0 C: \ Mono-2.10.5 \ lib \ mono \ 4.0 et maintenant il semble regrouper ok en procédant comme suit:

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

nano host.c

modifier les éléments suivants à partir de:

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

à

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

Et enfin:

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

Cela a fonctionné pour moi. Bien que je aussi certaines choses ont besoin de copier machine.config de C: \ Mono-2.10.5 \ etc \ mono \ 4.0 dans le répertoire où ma demande est, et passe --machine-config machine.config à mkbundle <. / p>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top