2012-07-05 52 views
12

Tôi đã cố gắng cả ngày để GTK # hoạt động trong Visual Studio 2010 trên Windows Server 2008 R2 x64 để tôi có thể bắt đầu viết các ứng dụng GUI đa nền tảng tốt đẹp, nhưng tôi hơi mới đến C# và tôi đang gặp một thế giới rắc rối.GTK # trong Visual Studio 2010

Tôi đã cài đặt Mono mới nhất cho Windows bao gồm GTK #. Tôi cũng đã cài đặt cấu hình Mono 2.10.8 làm khung mục tiêu của dự án của tôi một cách lỏng lẻo theo hướng dẫn từ đây: http://erictummers.wordpress.com/2012/01/25/target-mono-from-visual-studio/

Tôi đã tạo một ứng dụng Windows Forms mới và xóa tham chiếu đến công cụ biểu mẫu windows và thêm tham chiếu cho GTK # nội dung, theo hướng dẫn từ đây: http://jrwren.wrenfam.com/blog/2008/11/01/gtk-in-visual-studio-2008-on-vista-x64/

Tôi cũng đã thêm tham chiếu đến gtk-dotnet ngoài các hướng dẫn từ hướng dẫn đó.

Đây là mã hoàn chỉnh ứng dụng của tôi:

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

Khi tôi cố gắng chạy này với bất kỳ cấu hình, tôi nhận được ngoại lệ sau đây:

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: 

tôi không thể tìm ra cách để có được nó để tìm dll đó! Tôi thậm chí đã cố gắng sao chép 4 bản sao của DLL vào khá nhiều thư mục trong giải pháp với các tên sau: glibsharpglue-2glibsharpglue-2.dllglibsharpglue-2.oglibsharpglue-2.o.dll! Tôi thậm chí còn thử cài đặt gói GTK all-in-one từ trang GTK và thêm thư mục bin của nó vào đường dẫn hệ thống của tôi, và sau đó sao chép cùng 4 dll vào thư mục đó, tất cả đều không có may mắn.

Bất kỳ lời khuyên nào cho vấn đề điên rồ của tôi? Tôi cảm thấy như tôi đang thiếu một cái gì đó lớn ở đây. > _ <

Trả lời

19

Tôi đã tìm ra! Mono cho Windows hoàn toàn không cần thiết. GTK # cho .NET là những gì tôi cần. Đối với bất cứ ai trong tương lai mong muốn thiết lập môi trường Windows của họ cho nền tảng GTK # phát triển, đây là các bước tôi theo:

  1. Cài đặt một mục tiêu dự án Mono với hướng từ đây: http://erictummers.wordpress.com/2012/01/25/target-mono-from-visual-studio/
  2. Cài đặt GTK # cho .NET từ trang web tải xuống Mono chính thức.
  3. Cài đặt Glade/GTK + cho Windows, dự án sourceforge tại đây: http://sourceforge.net/projects/gladewin32/
  4. Tạo dự án C# mới nhắm mục tiêu Mono.
  5. Tham khảo các hội đồng cần thiết cho dự án của bạn từ nơi bạn đã cài đặt GTK # cho .NET.
+1

Mặc dù hỗ trợ Windows.Forms của Mono hỗ trợ đa nền tảng không phải là tất cả những gì tồi tàn ... – ruffin

+0

Cảm ơn bạn đã quay lại và giải thích! – heltonbiker

+0

Tôi tò mò, tại sao bạn muốn nhắm mục tiêu mono? Có vấn đề gì với việc sử dụng trình biên dịch Visual C# của Microsoft không? Nếu mọi thứ tương thích đủ, tôi sẽ nghĩ rằng trình biên dịch của Mono hoặc Microsoft có thể tạo ra một nhị phân có thể chạy trên thời gian chạy của Mono hoặc thời gian chạy .NET của Microsoft. –