我无法在windows上运行GTK#应用程序,如果能得到任何帮助,我将不胜感激。我试着在谷歌上搜索,但找不到解决问题的方法。
我用GTK#在monodevelop中编写了一个小应用程序,它只需打开一个带有按钮的窗口。它在linux上运行良好。
然而,我无法让它在windows上运行。我尝试安装GTK+和GTK#可再发行文件,GTK#SDK,但它仍然不起作用。而且它不会显示(在命令行中)抛出的任何异常,这将有助于调试问题。
在调用.exe之后,它会在那里停留几秒钟,然后shell再次出现,等待下一个命令,没有任何输出。
有人能告诉我,为了运行GTK#应用程序,我必须在原始windows安装上安装什么吗?
[edit]我知道运行它们不需要mono,如果可能的话,我希望避免它。
单声道。Posix是GTK#系统的必需部分,它包含用于处理国际化文本的gettext库接口。通过在MonoDevelop中编写,在创建GUI界面时可以选择允许国际化文本,它将自动调用此库作为生成的Build函数的一部分(它似乎是在设置用户显示的文本时调用的,比如表单的标题)。这意味着您只需要Mono。Posix.dll库(将在Microsoft.NET上运行),而不是完整的Mono运行时。
异常可能被写入stderr而不是stdout,默认情况下Windows命令行不会显示stdout。尝试:
myapp.exe 2> my.log
并查看是否将错误写入名为my.log的日志文件。
和你一样,我在Windows 10上运行时也遇到了问题。在我的案例中,这个问题在另一个谷歌结果发布到一个博客后得到了解决,该博客提到了Mono。Posix引用确实是原因。然而,博客指出,您还必须删除/转换global::Mono.Unix.Catalog.GetString
(如果您使用的是MonoDevelop的SteticGUI创建者)。这些通常会在你的标签上。
即:
dev@laptop:/tmp/myproject$ 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"
由于SteticGUI创建者通常将Partial类文件放在项目目录的子文件夹gtk-GUI中。那可能是检查流浪者的最佳地方。尽管ripgrep
(rg
命令在那里使用了,但它会对所有子文件夹进行递归快速目录搜索,所以不妨使用它)
之后,您必须安装的GTKSharp Runtime。NET(截至今天,它的文件gtk-sharp-2.212.45msi来自mono-project.com,用于gtk+,也称为GTK2。GTK3是不同的,对于未来的谷歌来说可能会有所不同
之后,在MonoDevelop中重新编译应用程序,您可以在Windows 上运行它
步骤来源:https://www.martyndavis.com/?p=432
实际上,应用程序可以在没有Mono(例如控制台应用程序)的情况下在Windows上运行,但前提是您引用了Mono。Posix在代码中,它可以使用一些无法在Windows上执行的特定于平台的功能。在MonoDevelop中的Windows上,您可以在框架(Mono或MS.Net)之间进行选择。请尝试在选择MS.Net框架的情况下在Win上重新编译应用程序。