質問

Mkbundleを使用して、ユーザーが.NET/MONOまたはGTK#をインストールする必要なくGTK#アプリケーションを配布できるようにしようとしています。 Winformsを使用するアプリケーションを正常にバンドルしましたが、何らかの理由でGTK#アプリケーションで同じことをすると機能しません。

これは私がCygwinから得るものです:

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

未処理の例外:System.io.FileNotFoundException:ファイルまたはアセンブリ「GTK-Sharp」またはその依存関係の1つをロードできませんでした。システムは、指定されたファイルを見つけることができません。
ファイル名:「GTK-Sharp」
at System.AppDomain.Load(System.Reflection.Assemblyname AssemblyRef、System.Security.Policy.Evidence AssemblySecurity)[0x00000] in:0
at(wrapper remoting-invoke-with-check)system.appdomain:load(system.reflection.assemblyname、system.security.policy.evidence)
at System.AppDomain.Load(System.Reflection.Assemblyname AssemblyRef)[0x00000] In:0
at(lapper remoting-invoke-with-check)system.appdomain:load(system.reflection.assemblyname)
System.Reflection.Assembly.Load(System.Reflection.AssemblyName AssemblyRef)[0x00000] In:0
MakeBundle.QueueAssembly(System.Collections.ArrayList Files、System.String CodeBase)[0x00000] in:0
MakeBundle.Main(System.String [] args)[0x00000] in:0
エラー]致命的な未処理の例外:System.io.FileNotFoundException:ファイルまたはアセンブリ「GTK-Sharp」またはその依存関係の1つをロードできませんでした。システムは、指定されたファイルを見つけることができません。
ファイル名:「GTK-Sharp」
at System.AppDomain.Load(System.Reflection.Assemblyname AssemblyRef、System.Security.Policy.Evidence AssemblySecurity)[0x00000] in:0
at(wrapper remoting-invoke-with-check)system.appdomain:load(system.reflection.assemblyname、system.security.policy.evidence)
at System.AppDomain.Load(System.Reflection.Assemblyname AssemblyRef)[0x00000] In:0
at(lapper remoting-invoke-with-check)system.appdomain:load(system.reflection.assemblyname)
System.Reflection.Assembly.Load(System.Reflection.AssemblyName AssemblyRef)[0x00000] In:0
MakeBundle.QueueAssembly(System.Collections.ArrayList Files、System.String CodeBase)[0x00000] in:0
at makebundle.main(system.string [] args)[0x00000] in:0`

しかし、私はパス変数に/cygdrive/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年5月の時点で、次のようにスクリプトを使用できます。

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

1.)Cygwinをインストールし、次のパッケージを選択してください:-GCC-MINGW-PKG-CONFIG-MINGW-ZLIB1-MINGW-ZLIB-DEVEL

2.)モノリリースパッケージをインストール:「Windows、GTK#、XSP用のモノー」

3.)アプリケーション以外にスクリプトの配置をダウンロードし、環境に合うように変更します(ファイルのコメントを注意深くお読みください)。

4.)Cygwinを開いて、EceCutableとSciptがあるアプリケーションの出力フォルダーに移動します。たとえば、Project/Bin/リリース

5.)コマンドでスクリプトを実行します:./mkbundle_cygwin.sh

トラブルシューティング:バンドルされた実行可能ファイルが機能しない場合は、元の.NETアプリケーションがMonoで機能することを確認してください。 Mono.exeを呼び出して.NETアプリを渡すか、XamarinStudioをインストールしてそこからプロジェクトを実行することでテストできます(モノをランタイムとして設定します)。

他のヒント

これが本当の解決策であるかどうかはわかりませんが、C: gtksharp 2.12 lib gtk-sharp-2.0からc: mono-2.10.5 lib mono 4.0およびこれで、次の手順を使用してOKをバンドルするようです。

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

それは私のために働いた。また、私はc: mono-2.10.5 etc mono 4.0からmachine.configをコピーする必要がありましたが、私のアプリケーションがあるディレクトリに、そして-machine-config machine.configをmkbundleに渡します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top