【问题标题】:How to port a Mono GTK# app to other platforms?如何将 Mono GTK# 应用程序移植到其他平台?
【发布时间】:2011-07-03 10:20:25
【问题描述】:

我正在开发一个用 C# 编写的 Mono GTK# 桌面应用程序。我在 Mac (OS X v10.6.7) 上使用 MonoDevelop IDE (v2.4.2) 开发了我的应用程序。我的应用程序依赖于 GTK# 库(显然)以及 Mono.WebServer2 库来运行本地 ASP.NET 服务器。

我已经在我自己的 Mac 以及其他 Mac 上测试了我的应用程序。一切都很好。现在,我有兴趣将我的应用程序移植到其他平台(特别是 Windows 7 和 Ubuntu v11.04)。我一直在玩mkbundle 命令,但在为 Mac OS X 以外的其他平台创建工作包方面没有任何运气。

由于我尝试了许多不同的解决方案,但都没有成功,我想听听 Mono 开发人员的意见。您如何将您的应用移植到其他平台?

我一直在使用 Visual Studio 开发 C#,但我是 Mono 开发环境的新手。因此,我将非常感谢详细的解释。

非常感谢!

【问题讨论】:

    标签: c# mono monodevelop gtk# xsp2


    【解决方案1】:

    这听起来不像你在谈论移植,而是包装。 MonoDevelop 的“项目/创建包”功能可以创建简单的二进制包(zip 等)或源包(源加 makefile),但这些不是分发给大多数最终用户的理想形式。为每个平台制作精美的安装程序需要一些额外的工作。

    mkbundle 将 Mono 运行时捆绑到您的应用中,因此它会创建 100% 特定于平台的二进制文件。

    对于 Mac,分发应用程序的常用方式是作为应用程序包。 MonoDevelop 不会为 GTK# 项目自动执行此操作,但我解释了如何执行此操作 on my blog

    对于 Ubuntu,您可以分发二进制压缩包并要求您的用户安装 Mono、GTK# 和 xsp。如果您创建 .deb 包,则可以将这些依赖项嵌入到包清单中。 MonoDevelop 没有任何用于创建 deb/rpm linux 包的工具,我自己也不熟悉这个过程。

    对于 Windows,您可以提供二进制文件的 zip,并要求您的用户安装 .NET 和适用于 .NET 的 GTK#。您还可以创建一个 msi 安装程序并让它检查这些先决条件。

    【讨论】:

    • 感谢您的博文。它真的很有帮助。我有一个 GTK# 应用程序,我需要为它创建一个适用于 Mac 的 App Bundle。我需要在这个包中包含 Mono Runtime,以便用户不需要单独安装Mono。可以吗?
    • 有可能但很难,我不知道步骤,对不起!
    【解决方案2】:

    听起来你已经解决了 Mac 的打包问题。

    在 Ubuntu 上,您需要创建一个 .deb 包,其中包含您的应用程序并需要其他包作为依赖项(Mono、Mono.WebServer2、GTK#、GTK+ 等)。以下链接应该可以帮助您开始构建 Ubuntu 软件包:

    https://wiki.ubuntu.com/UbuntuDevelopment

    对于 Windows,如果您有 .NET 经验,您可能已经知道如何构建安装程序。我会说您希望在 .NET 而不是 Mono 上运行您的应用程序。这就是 Mono 团队自己做的事情(以 MonoDevelop 为例)。将 Mono.WebServer2 等 Mono 特定位作为应用程序的一部分引入。

    您最大的问题是 GTK# 需要安装 GTK+ C 库。可能最简单的事情是检测 GTK# 是否作为安装程序的一部分安装,并要求您的用户在需要时安装 GTK#。无论如何,您都必须对所需的 .NET 版本进行相同的检测。您可以获取适用于 Windows 的 GTK# here

    我对此没有很好的说明,但 Banshee 和 MonoDevelop 项目都做得很好。我会看看这些项目,因为它们会准确地告诉你需要做什么。

    https://github.com/mono/monodevelop

    http://git.gnome.org/browse/banshee

    编辑:

    我最近才意识到 GTK# 安装程序的代码位于 GitHub here

    【讨论】:

      【解决方案3】:

      Monodevelop 也提供打包项目。你可以使用它们。

      我怀疑 mkbundle 能否在 Linux 之外运行良好。

      另一种选择是在其他平台上打开您的项目(您可以使用 Monodevelop)并构建项目并使用其他一些应用程序来构建包。

      【讨论】:

      • 您对mkbundle 的看法可能是正确的。我尝试了您关于在另一个平台上构建我的应用程序的建议。我在 Windows 上执行此操作,但由于缺少 Mono.WebServer2 库而没有成功。如何直接从 MonoDevelop 打包我的应用程序?
      • 您可以从 Mac 复制该程序集。对于项目菜单中的包,有一个“创建包”菜单,请查看。
      【解决方案4】:

      我最近刚刚创建了我自己用 MonoDevelop 编写的 .Net 项目的 deb 包。从 MonoDevelop 我创建了一个包含源和 makefile 的包(makefile 也由 MonoDevelop 生成),然后我使用了这个指南>

      http://www.webupd8.org/2010/01/how-to-create-deb-package-ubuntu-debian.html

      创建 deb 包。依赖项是 mono-runtime 和 gtk-sharp2。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        • 2012-05-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-08
        • 1970-01-01
        相关资源
        最近更新 更多