让GTK#​​app在Windows上运行

时间:2012-10-07 10:44:14

标签: c# .net visual-studio mono gtk#

我无法在Windows上运行GTK#应用程序,我将不胜感激。我试过googleing,但无法为我的问题找到解决方案。

我使用GTK#在monodevelop中编写了一个小应用程序,只需打开一个带按钮的窗口。 它在linux上运行良好。

但是我无法让它在Windows上运行。 我尝试安装GTK +和GTK #reisistributables,GTK#SDK,但它仍然不起作用。并且它不会显示抛出的任何异常(在命令行中),这将有助于调试问题。

在调用.exe之后,它会在那里停留几秒钟,然后shell重新出现,等待下一个命令,无论如何都没有输出。

任何人都可以告诉我我必须在原始Windows安装上安装什么才能运行GTK#应用程序?

[edit]我知道运行它们不需要单声道,如果可能的话,我想避免使用单声道。

4 个答案:

答案 0 :(得分:1)

异常可能是写入stderr而不是stdout,Windows命令行默认情况下不显示。尝试:

myapp.exe 2> my.log

并查看是否将错误写入名为my.log的日志文件。

答案 1 :(得分:1)

Mono.Posix是GTK#系统的必需部分 - 它包含用于处理国际化文本的gettext库接口。通过在MonoDevelop中编写,有一个选项可以在创建GUI界面时允许国际化文本,这将自动调用此库作为生成的Build函数的一部分(它似乎在设置用户显示的文本时调用,如您的标题形成)。这意味着您只需要Mono.Posix.dll库(可在Microsoft .NET上运行),而不是完整的Mono运行时。

答案 2 :(得分:1)

就像您一样,我在Windows 10上运行时遇到问题。在我的情况下,此问题已在另一个Google搜索结果发布到博客后得到解决,该博客提到Mono.Posix引用确实是原因。但是,博客指出,还必须删除/转换global::Mono.Unix.Catalog.GetString(如果使用的是MonoDevelop的Stetic GUI创建器)。这些通常会在您的标签上。

即:

rg "global::Mono.Unix."
96:     this.label2.LabelProp = global::Mono.Unix.Catalog.GetString("25 ROUNDS OF DEAF");

更改为

96:     this.label2.LabelProp = "25 ROUNDS OF DEAF"

因为Stetic GUI创建者通常将部分类文件放在项目目录的子文件夹gtk-gui中。那可能是检查流浪的最佳地方。尽管ripgrep(在那里用完的rg命令可以对所有子文件夹进行递归快速目录搜索,所以也可以使用它)

此后,您必须安装.NET的GTKSharp Runtime(到目前为止,它是来自mono-project.com的GTK +文件GTk-sharp-2.12.45.msi,也称为GTK2。GTK3是不同的,并且可能有所不同给未来的Google员工)

之后,在MonoDevelop中重新编译应用程序,然后可以在Windows上运行

步骤来源:https://www.martyndavis.com/?p=432

答案 3 :(得分:0)

实际上,应用程序可以在Windows上运行而不使用Mono(控制台应用程序),但如果您在代码中引用了Mono.Posix,它可以使用某些无法在Windows上执行的特定于平台的功能。 在MonoDevelop的Windows上,您可以选择框架(Mono或MS.Net)。尝试在Win上重新编译应用程序,选择MS.Net框架。