3

我正在开发一个用 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 开发环境的新手。因此,我非常感谢详细的解释。

非常感谢你!

4

4 回答 4

6

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

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

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

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

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

于 2011-07-05T11:41:16.840 回答
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# 。

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

https://github.com/mono/monodevelop

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

编辑:

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

于 2011-07-05T16:51:04.253 回答
0

Monodevelop 中也有打包项目。你可以使用它们。

我怀疑 mkbundle 在 Linux 之外是否能正常工作。

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

于 2011-07-03T10:51:31.377 回答
0

我最近刚刚创建了我自己用 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。

于 2011-07-20T08:37:02.787 回答