帮助一步构建所有项目+安装程序(.NET + WiX)

时间:2009-01-26 18:03:26

标签: visual-studio msbuild build-process wix

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

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

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

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

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

我打算只使用csproj来处理版本号并更新它,只是炮轰到MSBuild和烛光,但问题是我不知道如何从除了以外的代码访问解决方案目录

中的硬编码

2 个答案:

答案 0 :(得分:2)

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

这给我们留下了一个漂亮而多汁的构建过程,它不依赖于IDE中的任何讨厌的黑客攻击,并让我们完全控制源来自何处以及构建组件的位置。

答案 1 :(得分:0)

我正在使用一种适合我的不同方式,which I described here

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

我花了一段时间才想到这一切,但现在我以类似的方式发布了所有项目。