2009-07-24 75 views
4

我知道有很多关于这个相同信息的问题。我已经阅读了所有内容,但是我的大脑都转过身来,我不知道要走哪条路。另外缺乏文档真的很痛苦。WIX MSBuild自动化帮助 - 解决方案最佳实践

这是我的scenerio。我们正在尝试使用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上的应用程序进行任何更新(应用程序或数据更新)。
  • 该应用程序必须从互联网更新自己,以获取任何新的图像,文件或数据。
  • 如果客户端计算机上不存在先决条件,则必须先安装这些先决条件。
  • 完整的安装程序应该通过尽可能少的人为交互(我们不希望手动更新2000+文件列表)从MSBuild脚本生成。

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

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

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

如果有比我发现的更好的信息,请包括。我已阅读过大量文章,博客,Stackoverflow问题,tuturial,wiki等等。一切似乎都是零碎的。该教程很好,但没有解释任何关于MSBuild和Votive。我希望看到有关使用MSBuild和Votive以及所有WIX MSBuild目标的教程。如果没有人知道这样的教程,我可以把它们放在一起。我已经花了整整一周的时间收集信息和阅读。我也是MSBuild的新手,所以如果任何人在MSBuild上有很棒的文章,请包括他们。

+0

什么版本VS在您的构建机器上(或者是您的TFS)。这影响了MSBuild和Votive作品。你使用的是WiX2还是3? – JasonRShaver 2009-07-24 22:00:08

回答

0

我也有类似的情况,无法找到解决办法的下降,从而结束了以下内容:

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

每次构建是通过我们的持续集成服务器触发的生成后任务运行wixgen用正确的参数传递给生成该项目的新manifest.wxs被改变。它会自动包含部署所需的所有文件。这些版本还使用以下技术的变体来版本化dll:http://richardsbraindump.blogspot.com/2007/07/versioning-builds-with-tfs-and-msbuild.html

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

0

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

你可以找到更多的ClickOnce信息here

2

的关键是隔离不同类型的复杂性成单独的合并模块,并把它们完全成MSI作为构建的一部分。这样,变化的东西往往可以改变,而不会影响几乎不会改变的东西。

1)对于数据文件:

我们使用Paraffin生成维克斯,从而为一个html +基于Flash的帮助系统由数千个文件的合并模块(我无法说服客户去对CHM)。

将它们自己编译成合并模块。

2)组件:假设这是一组经常发生变化的只是少用手或用正确的文件和依赖WixEdit进行合并模块。

3)对于版本号有很多方法来管理这取决于你的构建系统。 AssemblyInfoTask是非常简单的方法,以确保您的所有程序集都适当版本化。如果您使用TFS,MSBuild扩展包有一些版本控制。

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开发)。