Domanda

Sto cercando di utilizzare mkbundle in modo che possa distribuire un GTK # applicazione senza che gli utenti che hanno bisogno di installare .NET / Mono o GTK #. Ho in bundle con successo un'applicazione che utilizza WinForms, ma per qualche ragione quando faccio lo stesso con un GTK # applicazione non funzionerà.

Questo è quello che mi alzo dal Cygwin:

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

Eccezione non gestita: System.IO.FileNotFoundException: Impossibile caricare il file o l'assembly 'gtk-sharp' o una delle sue dipendenze. Il sistema non riesce a trovare il file specificato.
Nome file: 'gtk-sharp'
a System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity) [0x00000] in: 0
a (involucro servizi remoti-invoke-con-check) System.AppDomain: Carico (System.Reflection.AssemblyName, System.Security.Policy.Evidence)
a System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] in: 0
a (involucro servizi remoti-invoke-con-check) System.AppDomain: Carico (System.Reflection.AssemblyName)
a System.Reflection.Assembly.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] in: 0
a MakeBundle.QueueAssembly (file System.Collections.ArrayList, System.String codebase) [0x00000] in: 0
a MakeBundle.Main (System.String [] args) [0x00000] in: 0
[ERRORE] FATAL un'eccezione non gestita: System.IO.FileNotFoundException: Impossibile caricare il file o l'assembly 'gtk-sharp' o una delle sue dipendenze. Il sistema non riesce a trovare il file specificato.
Nome file: 'gtk-sharp'
a System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity) [0x00000] in: 0
a (involucro servizi remoti-invoke-con-check) System.AppDomain: Carico (System.Reflection.AssemblyName, System.Security.Policy.Evidence)
a System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] in: 0
a (involucro servizi remoti-invoke-con-check) System.AppDomain: Carico (System.Reflection.AssemblyName)
a System.Reflection.Assembly.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] in: 0
a MakeBundle.QueueAssembly (file System.Collections.ArrayList, System.String codebase) [0x00000] in: 0
a MakeBundle.Main (System.String [] args) [0x00000] in: 0 '

Ma ancora non ho /cygdrive/c/GtkSharp/2.12/lib nel mio variabile PATH. Posso controllare questo, come se digito "gtk-sharp.dll" in Cygwin ottengo il seguente restituita:

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

Così dovrebbe essere in grado di trovare il file!

Qualsiasi aiuto sarebbe molto apprezzato.

È stato utile?

Soluzione

Ho trovato uno script di shell che fa tutto questo e modificato per le ultime versioni, a partire da maggio 2013 si può semplicemente utilizzare lo script come segue:

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

.

1) Installare Cygwin e assicurarsi di selezionare i seguenti pacchetti: - gcc-MinGW - pkg-config - mingw-zlib1 - mingw-zlib-devel

2) Installare il pacchetto di rilascio Mono:. "Mono per Windows, Gtk #, e XSP"

3.) Scarica il posto di script che oltre l'applicazione e modificarlo per adattare il vostro ambiente (leggere i commenti nel file con attenzione).

4.) Aprire Cygwin e passare alla cartella di output della vostra applicazione in cui l'ececutable e le bugie scipt, per esempio ProgettoUtente / bin / Release

5) Eseguire lo script con il comando:. ./Mkbundle_cygwin.sh

Risoluzione dei problemi: Se il file eseguibile in bundle non funziona assicurarsi che l'applicazione originale .NET funziona su mono. È possibile verificare che chiamando mono.exe e superare il tuo NET app per esso o installando XamarinStudio e l'esecuzione del progetto da lì (farà mono set come runtime).

Altri suggerimenti

OK Non so se questa è una vera soluzione, ma ho appena copiato le assemblee da C: \ GtkSharp \ 2.12 \ lib \ gtk-sharp-2.0 in C: \ Mono-2.10.5 \ lib \ mono \ 4.0 e ora sembra per impacchettare ok utilizzando le seguenti operazioni:

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

nano host.c

cambiare la seguente da:

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

a

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

E infine:

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

che ha lavorato per me. Anche se ho anche per alcune cose ho bisogno di copiare machine.config da C: \ Mono-2.10.5 \ etc \ mono \ 4.0 per la directory in cui la mia domanda è, e passare --machine-config machine.config a mkbundle <. / p>

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top