【问题标题】:Creating One MSI for multiple project为多个项目创建一个 MSI
【发布时间】:2009-12-31 01:13:00
【问题描述】:

我有 2 个项目。我想创建一个将安装这两个项目的单个 MSI 安装包。

在我的应用程序文件夹中,我创建了 2 个子文件夹(项目 A 和项目 B 文件夹)。所以安装后,项目输出将在 程序文件\我的产品\项目 A 程序文件\MyProduct\Project B

我遇到的问题是项目 A 和项目 B 引用了一些常见的程序集。 但是那些常见的程序集只复制到 Project A 文件夹中。

有没有办法强制 msi 将公共程序集复制到项目 A 和项目 B 文件夹?

【问题讨论】:

  • 不,来自 Visual Studio 的设置模板。不知道什么是 WiX

标签: .net windows-installer setup-project


【解决方案1】:

作为构建过程的一部分,从 Visual Studio 中构建 MSI 安装程序并不总是最灵活的方法。我个人使用 NSIS,因为它非常强大,但如果您正在寻找构建 MSI 安装程序,我建议您查看Wix

我很少让 Visual Studio 自动为我做事 - 我喜欢明确地声明安装了哪些 dll 以及安装位置。

【讨论】:

  • 同上。 Visual Studio 安装项目类型非常有限。如果您想做这样的事情,您需要学习 WiX 或购买第三方产品,如 InstallShield。我简单地看了一下 WiX,发现它学起来相当复杂(因为 MSI 标准很复杂)。
  • 我还简要地查看了 WiX。好吧,似乎获得了更多的灵活性=复杂性。但目前,我唯一的选择是 Visual Studio 安装项目
  • @pdiddy - 你是对的,灵活性确实意味着复杂性。但是,您也会因为使用错误的工具而造成不必要的复杂性。
【解决方案2】:

在您的设置项目中,我假设您有两个文件夹,每个文件夹一个。选择缺少 .dll(s) 的文件夹并右键单击它,点击 Add->File... 并选择要强制包含在项目输出中的 .dll。

【讨论】:

  • 我想过,但这是正确的方法吗?我希望 MSI 检测到项目输出已移动到某个文件夹,并且它将直接放置依赖项。但它只对其中一个项目执行此操作。使用您的解决方案,我应该使用什么 dll?我可能在 DEBUG 或 RELEASE 中创建设置,我不想每次都手动添加相应的文件 bin\Debug 或 bin\Release。通用程序集也是项目库。
  • 根据我对 MSI 的理解,只有一个需要在目标系统上进行更改的数据库,并且数据库中的一个表包含要安装的文件列表。安装项目的 UI 中可能有逻辑检测到您的常用程序集已包含在内,因此当您添加第二个项目时它会跳过它们。强制它以我描述的方式添加文件应该强制该文件表中的另一个条目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
相关资源
最近更新 更多