2012-07-05 22 views
12

Próbowałem cały dzień, aby GTK # pracował w Visual Studio 2010 na Windows Server 2008 R2 x64, dzięki czemu mogę zacząć pisać ładne, wieloplatformowe aplikacje GUI, ale jestem trochę nowy do C# i mam świat kłopotów.GTK # w Visual Studio 2010

Zainstalowałem najnowszą wersję Mono dla systemu Windows, która zawiera GTK #. Zainstalowałem także profil Mono 2.10.8, który ma być docelową strukturą mojego projektu, luźno postępując zgodnie z przewodnikiem: tutaj: http://erictummers.wordpress.com/2012/01/25/target-mono-from-visual-studio/

Utworzono nową aplikację Windows Forms i usunięto odniesienia do plików formularzy systemu Windows oraz dodałem odwołania do GTK # rzeczy, luźno podążając za przewodnikiem stąd: http://jrwren.wrenfam.com/blog/2008/11/01/gtk-in-visual-studio-2008-on-vista-x64/

Dodałem także odniesienie do gtk-dotnet oprócz tych z tego przewodnika.

Jest to kompletny kod mojego aplikacji:

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(); 
     } 
    } 
} 

Kiedy próbuję uruchomić to z dowolnej konfiguracji, pojawia się następujący wyjątek:

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: 

nie mogę dowiedzieć się, jak uzyskać to znaleźć dll! Próbowałem nawet skopiować 4 kopie biblioteki DLL do prawie każdego folderu w rozwiązaniu o następujących nazwach: glibsharpglue-2glibsharpglue-2.dllglibsharpglue-2.oglibsharpglue-2.o.dll! Próbowałem nawet zainstalować pakiet all-in-one GTK ze strony GTK i dodać jego folder bin do mojej ścieżki systemowej, a następnie skopiować te same 4 biblioteki dll do tego folderu, wszystko bez powodzenia.

Jakieś rady dotyczące mojego zwariowanego problemu? Czuję, że brakuje mi czegoś wielkiego. > _ <

Odpowiedz

19

Wymyśliłem! Mono dla Windows było zupełnie niepotrzebne. GTK # dla .NET jest tym, czego potrzebowałem. Dla każdego, kto w przyszłości chce założyć swoje środowisko Windows wieloplatformowym GTK # rozwoju, tutaj są kroki I przestrzegać:

  1. zainstalować cel projektu Mono z kierunków stąd: http://erictummers.wordpress.com/2012/01/25/target-mono-from-visual-studio/
  2. zainstalować GTK # dla .NET z oficjalnej strony pobierania Mono.
  3. Zainstaluj Glade/GTK + dla Windows, projekt sourceforge tutaj: http://sourceforge.net/projects/gladewin32/
  4. Utwórz nowy projekt C# kierujący do Mono.
  5. Odwołaj się do niezbędnych złożeń dla twojego projektu, od których zainstalowałeś GTK # dla .NET.
+1

Chociaż Windows.Forms Mono obsługuje platformę crossplatform, nie wszystko jest tak nędzne ... – ruffin

+0

Dzięki za powrót i wyjaśnienie! – heltonbiker

+0

Jestem ciekawy, dlaczego chcesz kierować reklamy na mono? Czy jest jakiś problem z używaniem kompilatora Visual C# firmy Microsoft? Jeśli rzeczy są wystarczająco kompatybilne, myślę, że albo kompilator Mono, albo Microsoft może produkować plik binarny, który może być uruchamiany albo w środowisku wykonawczym Mono, albo w środowisku wykonawczym .NET Microsoftu. –