4

我知道关于同样的信息有很多问题。我都看完了,但我的大脑都在转,我不知道该往哪边走。再加上缺乏文档真的很痛苦。

这是我的场景。我们正在尝试使用 WIX 为我们的应用程序创建一个安装程序,该安装程序会发送给我们的经销商以获取我们的产品信息。该应用程序包括我们产品的大约 2000 张图像和文档,以及通过 Microsoft Sync Framework 更新的 SQL CE 数据库。数据变化如此频繁,以至于将这 2000 个作为内容文件保留在应用程序的项目中是非常不可取的。该应用程序依赖于 .NET Framework 3.5 SP1、SQL Server CE 3.5、Microsoft Sync Framework 1.0 和 ADO.NET Sync Services 2.0。

以下是应用程序的要求:

  • 对于任何更新(应用程序或数据更新),经销商每年都会收到一张 CD 上的应用程序。
  • 该应用程序必须从互联网进行自我更新,以获取任何新的图像、文档或数据。
  • 如果客户端计算机上不存在必备项,则必须安装这些必备项。
  • 完整的安装程序应该从 MSBuild 脚本生成,尽可能少的人工交互(我们不希望手动更新 2000+ 文件列表)。

到目前为止,我们已经完成的是我们的解决方案中有一个 Votive 项目。我们在 .wxs 文件中手动指定了二进制文件。Web 已修改 .wixproj 文件以使用 HeatDirectory 任务从指定位置收集我们的数据(图像、文档和数据库)(这已损坏并给出 ICE38 错误)。这似乎没问题,但仍然需要大量工作。我们必须通过在发布模式下运行程序并将其复制到指定目录来手动更新我们的数据。

我想看看其他人在这种情况下会做什么。

  1. 对于 2000 多个数据文件,您将如何安排您的解决方案?您会创建一个从服务器获取当前数据的自定义构建脚本,还是将它们作为内容文件包含在主项目中?
  2. 您如何让 WIX 包含所有项目输出(包括引用的程序集)和所有数据文件?如果你有完整的样品,那就太好了。我所找到的只是到处都是小片段,而不是从头到尾的完整示例。
  3. 您将如何处理版本号?您会将它们作为常量放在构建脚本中并通过 $(var.VersionNumberName) 引用它们吗?您是否会从正在部署的项目中自动获取版本号?如果是这样,如何?

如果有比我发现的更好的信息,请包括。我已经阅读了许多文章、博客、Stackoverflow 问题、教程、wiki 等。一切似乎都是零碎的。该教程很好,但没有解释有关 MSBuild 和 Votive 的任何内容。我希望看到有关使用 MSBuild 和 Votive 以及所有 WIX MSBuild 目标的从头到尾的教程。如果没有人知道这样的教程,我可能会放在一起。我已经花了整整一周的时间来收集信息和阅读。我也是 MSBuild 的新手,所以如果有人有任何关于 MSBuild 的精彩文章,请包括在内。

4

4 回答 4

2

关键是将不同类型的复杂性隔离到单独的合并模块中,并将它们作为构建的一部分完全放入 MSI。这样,经常变化的事物可以在不影响几乎没有变化的事物的情况下发生变化。

1) 对于数据文件:

我们使用石蜡来生成 WiX,因此为包含数千个文件的基于 html + Flash 的帮助系统生成合并模块(我无法说服客户去 CHM)。

将它们全部编译成一个合并模块。

2) 程序集:假设这是一个不经常更改的集合,只需手动或使用带有正确文件和依赖项的 WixEdit 创建一个合并模块。

3)对于版本号,有很多方法可以根据您的构建系统来管理它。AssemblyInfoTask 是一种非常直接的方法,可以确保您的所有程序集都进行了适当的版本控制。如果您使用 TFS,MSBuild 扩展包有一些版本控制的东西。

于 2009-08-18T01:41:37.133 回答
0

我有类似的情况,无法找到解决方案,所以最终得到以下结果:

我编写了一个名为 wixgen.exe 的自定义命令行程序,用于生成 wxs 清单文件。它对我们的实现非常具体,因为它只知道如何创建 2 种类型的 wxs 文件。一个用于 IIS 网站/虚拟目录部署,另一个用于 Windows 服务部署。

每次我们的持续集成服务器触发构建时,构建后任务都会使用正确的 args 运行 wixgen 来为正在更改的项目生成新的 manifest.wxs。它自动包含部署所需的所有文件。这些构建还使用以下技术的变体对 dll 进行版本控制:http ://richardsbraindump.blogspot.com/2007/07/versioning-builds-with-tfs-and-msbuild.html

然后使用手动触发的单独构建来构建包含生成的 wxs 文件的 wixproj 项目并生成 msi。

于 2009-08-03T08:26:35.610 回答
0

我会放弃 CD 交付(所以 90 年代)并使用 ClickOnce。这个解决方案似乎很合适,因为您已经使用了 .NET 框架。使用 ClickOnce,您应该能够不断更新您的解决方案的内容,并为您的心脏内容提供更新。如果您需要,请告诉我,示例 ClickOnce 部署代码。

您可以在此处找到更多 ClickOnce 信息。

于 2009-08-16T20:43:58.397 回答
0

与 dkackman 的回答类似,您应该将构建分成几个组件,隔离构建组件以单独构建。

我主要来自 Java 背景,但是为了构建 MSI 和 NET 可执行文件,我们使用 maven;使用“maven-wix-plugin”插件构建安装程序,并使用 NMaven 插件编译任何 NET 代码。然而,由于我们只在 NET 中执行非常基本的开发,而大多数开发是在 Java 中进行的,我们不需要 NMaven 插件的太多复杂性(这可能是一个“好东西”(TM),因为它仅在版本 0.17 )。

如果你是一个纯粹的 NET 公司,你也可以看看 Blydan ( http://www.codeplex.com/byldan ),这似乎是目前那里的开发重点(它是 NMaven 和 Byldan 的同一个团队)。

如果您确实想了解有关 NMaven 或 Byldan 的更多信息,请提出另一个问题,我将提供尽可能多的信息(这不是一个巨大的数量,正如我所说的那样,我只进行非常有限的 NET 开发)。

于 2009-08-25T09:03:11.383 回答