【问题标题】:How do I package my linux application using MonoDevelop?如何使用 MonoDevelop 打包我的 linux 应用程序?
【发布时间】:2010-12-16 20:58:09
【问题描述】:

我有一个使用 MonoDevelop 用 C# 编写的爱好项目。一段时间以来,我一直在尝试了解 linux 封装,但我总是感到沮丧和不知所措。

我的程序包括:

  • 一个库项目(“生成器”),它处理我的程序创建的数据。
  • 使用 Gtk# 的 ui(“界面”)项目。这个项目有两个子目录:“glade”(gtk 用来构建小部件的 xml 文件)和“book”(我的程序使用的数据)。
  • 库和接口项目都使用的实用程序项目(“Utils”)。
  • 一个刚刚启动界面的主项目(“MyProgramName”)。

我想做的(我认为)真的很简单(我认为):

  • 编译我的应用程序
  • 复制 .exe 和 .dll 文件(到 /usr/local/bin?)
  • 复制“book”目录(到/usr/local/bin?)
  • 复制“glade”目录(到/usr/local/bin?)

哦,我想把它作为一个 .deb 包来做。我认为如果我可以让 tarball 工作,一个 .deb 包应该不会太麻烦,但这就是我最终想要做的。

我仍然不确定如何执行此操作。我使用 MonoDevelop 创建了一个 Tarball。当我安装压缩包(使用./configuremakesudo checkinstall)时,它似乎安装了可执行代码(甚至创建了一个运行程序的命令),但忘记了“书”和“林间空地”目录。

我该怎么做呢?对不起,如果这是一个基本/广泛的问题。我一直在谷歌上搜索这个,我似乎找不到任何不假设我知道包装基础知识的东西(即使它声称它不假设这一点)。

【问题讨论】:

    标签: c# linux packaging monodevelop


    【解决方案1】:

    也许this blog post 可能对你有帮助。

    详尽地描述了一个deb包的结构,如下:

    <YOUR PACKAGE NAME>
    └── deb
        ├── DEBIAN
        │   ├── conffiles
        │   ├── control
        │   └── preinst
        └── opt
            └── <YOUR APPLICATION>
                └── <Your Application Contents>  
    

    基本上,您在包内有一个 deb 文件夹,其中包含以下 2 个必需文件夹:

    • DEBIAN - 包含描述 deb 包本身的文件
    • 镜像包目标的文件系统结构 安装。在上面的示例中,包将部署在/opt/&lt;YOUR APPLICATION&gt; 目录中。

    从 DEBIAN 目录中,您必须至少有 control 文件,它是纯文本。它需要包含链接页面中详细描述的特定格式的条目。这是一个带有示例控制文件的示例(取自那里):

    Package:packagingmono
    Version:1.0
    Maintainer:Mikael Chudinov <mikael@chudinov.net>
    Architecture:amd64
    Section:net
    Description:Template for Debian packaged Mono application.
    Depends:mono-complete (>=3)
    
    • Package 必须是你的包名。允许使用大写/小写拉丁字母、数字和-
    • Version - 软件包版本。我建议使用该字段的程序集版本。
    • Maintainer - 软件包开发者姓名和联系信息。
    • Architecture - i386amd64。如果您想将针对 x86 和 x64 优化的应用程序作为每个平台的单独可执行文件分发(我的意思是为 x64 或 x86 显式构建,而不使用 AnyCPU),那么您应该为每个平台生成单独的 .deb 包,并设置 Architecture 字段适当地。其余字段可能仍然相同。
    • Section - 可选,可以是 debian apt 系统中的任何 allowed package categories
    • Description。由两个标记组成 - 简短说明(换行符之前的第一项)和可选的更长的说明(第一个换行符之后的文本)。
    • Depends - 包的依赖项列表。该示例声明 mono-complete 是单声道运行时的包名称,并进一步将其限制为高于或等于版本 3

    关于 deb 包的重要知识是,您实际上可以将整个应用程序(bin 文件夹的内容)放入单个包中。 无需将引用的库放在单独的包中并将它们标记为依赖项,如果您计划安装依赖于相同库的其他应用程序,后者是有意义的。此外,将应用程序打包在一起不会让 dll-hell 问题有朝一日成为 package-hell 问题。这样做的一个缺点是包的大小可能会变大。

    本文还推荐了一些原生 GNU/Linux 工具,它们可以帮助您创建包。例如,xbuild 可用于运行将为您打包的 MSBuild 文件。这将有助于使 Windows 开发人员更熟悉这些内容。 lintian 工具还可以帮助您解决生成的 .deb 文件的问题。其余工具是在 MSBuild 打包过程中调用的中间实用程序。

    【讨论】:

    • @Mogsdad,确实,你说得有道理。不幸的是,我在旅行时用手机接听电话,所以我无法丰富帖子。我现在更新了,所以你可以删除downvote
    • 不是我的反对意见;我只是在解释你为什么会得到它们——但我会删除我的评论,感谢你采取行动。祝你好运! (PS:你不必急着用手机回答一个 7 年前的问题...... OP 已经开始了。)
    • 感谢@Mogsdad,很抱歉在没有证据的情况下责怪您,这与否决票一样糟糕,甚至更糟。我必须承认,问题的日期是我注意到的最后一件事,而且由于我前一天进入 Debian 包装,我决定在我还在炒作的时候回答,相关信息对我来说很容易找到。祝你一切顺利。
    • @Ivaylo 我确实已经继续前进了,但仍然感谢您 :) 我相信其他用户将从您的回答中受益。
    【解决方案2】:

    Debian 软件包就像 tar 文件——它们包含文件系统的副本。要创建 Debian 软件包...

    1. 在构建目录中安装 tarball。
    2. 添加一个包含控制文件的 DEBIAN 目录。我发现 this article 很有帮助。
    3. 使用dpkg --build 创建包。

    我将从学习 GNU 的自动工具开始:autoconf 和 automake。它们使在构建目录中安装程序变得非常容易。你提到了./configure。所以我假设 ythis 项目已经有了一些结构。从描述中,听起来项目可能需要...

    • configure.in 中的条目,用于“book”和“glade”中的文件。
    • “book”和“glade”中的 Makefile.am 文件。

    将它们放在一起,以下命令会生成一个名为 project.deb 的包文件。

    # ./configure --prefix build/usr # 制作 && 制作安装 # dpkg --build 构建项目.deb

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-03
      • 2016-04-01
      • 2015-12-03
      • 2013-07-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      相关资源
      最近更新 更多