【问题标题】:Fully portable GTK# application完全可移植的 GTK# 应用程序
【发布时间】:2022-11-05 15:22:13
【问题描述】:

我有一个用 GTK# 用 C# 编写的 GUI 应用程序,我想将它发布到便携的格式,无需用户在其系统上安装任何类型的 GTK、GTK#、.NET 或 Mono 运行时或库.

重要的是,此应用程序可以在无法安装此类软件的机器上使用 - 一个例子是在学校硬件上,因为它本质上是一个我希望能够运行的学校项目(不一定发展)在学校。

当然,这需要跨平台.

2009 年的This similar question 收到了answer,它建议在应用程序的安装程序中包含 GTK# 安装程序。理想情况下,我不希望我的程序有任何类型的安装程序(请参阅我之前关于学校硬件的观点 - 这不可行)。这也会破坏应用程序可移植的目的。

2011 年的Another question 看起来更有希望,它的answer 建议在其他选项中将运行时嵌入到应用程序中——根据答案,这应该会获得我正在寻找的结果。但是,由于答案现在已有十多年的历史了……这是过时的建议吗?有没有更好的办法?

关于将 Mono 运行时嵌入到应用程序中的可能性,我将如何去做呢?答案链接到this guide,但对我来说不是很清楚,所以也许我错过了其他资源?

【问题讨论】:

    标签: c# gtk gtk#


    【解决方案1】:

    这可以使用 .NET 6(或 5,如果您愿意)和 GTK3 .NET nuget 库来实现,然后使用 dotnet 将您的应用程序发布为单个文件。如果您将 GTK# 与 .NET 4.8 或更低版本或 Mono 一起使用,那么您可以从这里迁移到 .NET 6.0 和 GTK3——但是,根据您的代码,这可能需要一些时间。从 .NET 4.8 到 .NET 6.0 的迁移大多是微不足道的;从 GTK#(基于 GTK2)到 GTK3 的迁移涉及更多。但是——有希望——这是可行的。

    要获取的 nuget 库是 GdkSharp、GLibSharp、GtkSharp 的 v3.24+ 以及可能的 CairoSharp 和 PangoSharp。

    我有一个最初使用 GTK#(GTK2,Mono)的应用程序,现在是 GTK3 和 .NET 6。如果您想查看其结构,源代码是开源的并且可以公开获得(https://continuity.nz/Downloads/Continuity%20v22.74-377%20Source.zip)。

    重要笔记:

    • 在 Windows 上,我已经能够为所有 .NET 库发布单个文件,但不能为 GTK3 C 依赖项发布。我已经通过在分布式包(带有许可证文件)中包含 GTK3 库来解决这个问题。

    • 在 Mac OS 上,我还不能弄清楚如何在发行版中包含 GTK3 C 库,所以我不得不提供使用 brew 安装的说明。

    • 在 Linux 上,GTK3 在 gnome 桌面环境中的常见可用性意味着单文件应用程序“可以正常工作”,而无需随其分发任何 C 库。

    • Visual Studio 或 Mono Develop 没有用于表单的设计器插件,因此您必须习惯于手动创建这些。

    • 我已经找到一些Mac 上 GTK3 实现的稳定性问题,特别是在使用某些小部件时,指针似乎会被冷落,但您可能不会遇到这个问题。

    如有任何进一步的问题,如果您踏上这段旅程,请联系我们。我之前可能已经回答过这条路。

    【讨论】:

      猜你喜欢
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2017-10-29
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多