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-2
glibsharpglue-2.dll
glibsharpglue-2.o
glibsharpglue-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. > _ <
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
Cảm ơn bạn đã quay lại và giải thích! – heltonbiker
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. –