3

我在安装程序上有预构建事件,以使用适当的配置等重建项目。

如果我在 Visual Studio 中的 WiX (3.0) 项目上右键单击构建/重建,则一切正常,但如果我尝试在 wixproj 文件上运行 MSBuild,预构建事件将引发错误。

我可以改为在 wixproj 上调用 Candle 和 Light,但它不会运行预构建事件。

预构建事件依赖于 VS 提供的宏,除了创建另一个项目之外,我不知道如何解决这个问题,基本上只是使用项目的预构建事件,这只是尖叫 hack。

另一个问题是我需要从命令行向 WiX 输入一个自我更新的版本号。

我打算只使用一个 csproj 来处理版本号并更新它,然后只使用 MSBuild 和 Candle 和 Light,但问题是我不知道如何从硬编码以外的代码访问解决方案目录它在

4

2 回答 2

2

我们发现在使用自动构建器(在我们的例子中为 VisualBuild)构建项目之前,使用实用程序编辑项目本身并转储所有预构建和构建后事件是最简单的。

这给我们留下了一个漂亮而多汁的构建过程,它不依赖于 IDE 中的任何讨厌的 hack,并且让我们可以完全控制源代码的来源和构建组件的去向。

于 2009-01-27T04:47:27.433 回答
-1

我正在使用一种对我来说效果很好的不同方式,我在此处进行了描述

  • 我在批处理文件中维护版本号,它只是将其写入环境变量
  • 我通过运行一个批处理文件来创建我的发布版本,该批处理文件首先调用“版本号”批处理文件(所以我在一个名为的环境变量中有版本号%VersionNumber%,然后执行一个MSBuild 项目文件
  • MSBuild 项目文件构建解决方案,我通过从环境变量中读取它来获取文件中 .exe.csproj版本号(如果它存在)(然后我使用MSBuild 社区任务AssemblyInfo在 pre中创建具有版本号的文件构建事件)
    这意味着从 Visual Studio 构建时 .exe 的版本为 0.0,但我很好,因为我从批处理文件创建了所有版本。
  • 要使用WiX 设置创建发布版本,我执行另一个批处理文件,它只调用上面提到的“构建”批处理文件,然后调用 WiX 实用程序candlelight构建实际设置。
  • candle使用.wxs文件创建设置,我再次从环境变量中获取版本号:$(env.VersionNumber)
  • 由创建的最终.msi文件light在其文件名中包含版本号,因为我将文件名(包括带有版本号的环境变量)作为参数传递:-out release\msi\bitbucket-backup-%VersionNumber%.msi

一开始我花了一段时间才弄清楚这一切,但现在我以类似的方式发布了我所有的项目。

于 2013-05-09T11:07:59.763 回答