【问题标题】:Getting GTK# app to run on windows让 GTK# 应用程序在 Windows 上运行
【发布时间】:2020-06-23 19:22:36
【问题描述】:

我无法让 GTK# 应用程序在 Windows 上运行,如果能获得任何帮助,我将不胜感激。我尝试用谷歌搜索,但无法找到解决问题的方法。

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

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

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

谁能告诉我我必须在原始 Windows 安装上安装什么才能运行 GTK# 应用程序?

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

【问题讨论】:

  • 因为它运行在 .NET 和 GTK# 可再发行组件上,WinDbg+SOS 可以用来查看什么是未处理的异常,blogs.msdn.com/b/tess/archive/2009/04/16/…
  • 原来它需要 Mono.Posix,ver 4.0.0。有谁知道如何解决这一问题?它应该在没有单声道的情况下工作......
  • 将 CopyLocal 设置为 true 应该可以解决此问题。如果仍然失败,您应该粘贴从 stderr 获得的完整错误消息

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


【解决方案1】:

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

【讨论】:

  • 仅供参考,要禁用 Gettext 内容并删除 Mono.Posix 依赖项,请执行以下操作: (1) 在项目设置中,在“Gtk#”下,禁用 gettext 翻译。 (2) 从程序集引用列表中删除Mono.Posix。 (3) 让 GUI 设计器重新生成所有 GUI 小部件的源文件。然后应该没有对 Mono.Posix 的引用,从而使应用程序再次编译。
【解决方案2】:

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

myapp.exe 2> my.log

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

【讨论】:

  • 谢谢,它确实出于某种原因将异常输出到 stderr。奇怪的是,对于控制台应用程序,它输出到标准输出,但 gtk# 应用程序输出到标准错误。现在,问题在于它缺少 Mono.Posix。为什么需要它?它应该在没有单声道的情况下运行,对吧?
【解决方案3】:

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

即:

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"

由于 Stetic GUI 创建者通常将 Partial 类文件放在项目目录的子文件夹 gtk-gui 中。这可能是检查流浪者的最佳地点。虽然ripgrep(在那里使用的rg 命令确实对所有子文件夹进行递归快速目录搜索,所以不妨使用它)

在此之后,您必须安装适用于 .NET 的 GTKSharp 运行时(截至今天,它是来自 mono-project.com 的 GTK+ 文件 gtk-sharp-2.12.45.msi,也称为 GTK2。GTK3 不同,也可能不同供未来的 Google 员工使用)

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

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

【讨论】:

  • 非常完整的答案
【解决方案4】:

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

【讨论】:

  • 我的意思是 GTK# 应该在没有单声道的情况下运行。我没有引用任何内容,只是使用 GTK# 显示一个空表单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多