13

Windows Server 2008 R2 x64 上の Visual Studio 2010 で GTK# を動作させようと一日中試みていたので、優れたクロスプラットフォームの GUI アプリケーションを書き始めることができましたが、C# は少し初めてで、世界を楽しんでいます。トラブルの。

GTK# を含む最新の Mono for Windows をインストールしました。また、ここのガイドに従って大まかに私のプロジェクトのターゲット フレームワークとなる Mono 2.10.8 プロファイルをインストールしました: http://erictummers.wordpress.com/2012/01/25/target-mono-from-visual-studio/

新しい Windows フォーム アプリケーションを作成し、Windows フォームへの参照を削除し、GTK# への参照を追加しました。大まかに次のガイドに従ってください: http://jrwren.wrenfam.com/blog/2008/11/01/gtk- in-visual-studio-2008-on-vista-x64/

そのガイドのものに加えて、gtk-dotnet への参照も追加しました。

これは私のアプリケーションの完全なコードです:

using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Linq;
using Gtk;

namespace GridToGo
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.Init();
            Window myWin = new Window("My first GTK# Application! ");
            myWin.Resize(200, 200);
            myWin.Destroyed += new EventHandler(myWin_Destroyed);
            Label myLabel = new Label();
            myLabel.Text = "Hello World!!!!";
            myWin.Add(myLabel);
            myWin.ShowAll();
            Application.Run();
        }

        static void myWin_Destroyed(object sender, EventArgs e)
        {
            Application.Quit();
        }
    }
}

これを任意の構成で実行しようとすると、次の例外が発生します。

System.TypeInitializationException was unhandled
  Message=The type initializer for 'Gtk.Application' threw an exception.
  Source=gtk-sharp
  TypeName=Gtk.Application
  StackTrace:
       at Gtk.Application.Init()
       at GridToGo.Program.Main() in F:\visual-studio\GridToGo\GridToGo\Program.cs:line 13
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.DllNotFoundException
       Message=Unable to load DLL 'glibsharpglue-2': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
       Source=glib-sharp
       TypeName=""
       StackTrace:
            at GLib.Thread.glibsharp_g_thread_supported()
            at GLib.Thread.get_Supported()
            at Gtk.Application..cctor()
       InnerException: 

そのdllを見つける方法がわかりません!次の名前で、DLL の 4 つのコピーをソリューション内のほぼすべてのフォルダーにコピーしようとさえしましたglibsharpglue-2 glibsharpglue-2.dll glibsharpglue-2.o glibsharpglue-2.o.dll。また、GTK サイトから GTK オールインワン パッケージをインストールして、その bin フォルダーをシステム パスに追加し、同じ 4 つの dll をそのフォルダーにコピーしようとしましたが、うまくいきませんでした。

私のクレイジーな問題に対するアドバイスはありますか?ここで何か大きなものが欠けているように感じます。>_<

4

1 に答える 1

20

私はそれを考え出した!Mono for Windows はまったく不要でした。.NET 用の GTK# が必要でした。将来、クロスプラットフォーム GTK# 開発用に Windows 環境をセットアップしたいと考えている人のために、私が従った手順は次のとおりです。

  1. ここからの指示に従って Mono プロジェクト ターゲットをインストールします: http://erictummers.wordpress.com/2012/01/25/target-mono-from-visual-studio/
  2. Mono の公式ダウンロード サイトから GTK# for .NET をインストールします。
  3. Windows 用の Glade/GTK+ をインストールします。sourceforge プロジェクトはこちら: http://sourceforge.net/projects/gladewin32/
  4. Mono をターゲットとする新しい C# プロジェクトを作成します。
  5. GTK# for .NET をインストールした場所から、プロジェクトに必要なアセンブリを参照します。
于 2012-07-05T14:53:17.447 に答える