帮助构建所有项目和安装程序(.NET + WiX)的一步式解决方案

3

我在安装程序上有一些预构建事件来重新构建具有适当配置的项目等。

如果我在Visual Studio中右键单击WiX(3.0)项目,就可以全部构建完成,但是如果我尝试在wixproj文件上运行MSBuild,预构建事件会抛出错误。

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

预构建事件依赖于VS提供的宏,除了创建另一个项目并基本上仅使用项目的预构建事件之外,我不知道如何解决这个问题,这只是一个骇人听闻的黑客。

另一个问题是,我需要从命令行将自更新版本号输入到WiX中。

我打算使用csproj处理版本号并更新它,然后只需使用MSBuild和Candle和Light即可,但问题是我不知道如何从代码中访问solution目录,而不是硬编码它。


那么有哪些错误呢?我在开发和构建机器上都花了很长时间才让WiX路径正常工作。如果这是你的问题,有一些解决方法。至于版本控制,我不知道…… - user1228
2个回答

2
我们发现最简单的方法是使用一个实用程序来编辑项目本身,并在使用自动构建工具(在我们的情况下是VisualBuild)构建之前,卸载所有的预构建和后构建事件。
这样可以留下一个美好而丰富的构建过程,不依赖于IDE中任何恶劣的技巧,并让我们完全掌控源代码的来源和构建组件的去向。

-1

我使用了一种对我来说很有效的不同方法,在这里我进行了描述

  • 我通过运行一个批处理文件(链接1)来维护版本号,该批处理文件将其写入环境变量中
  • 我通过运行一个批处理文件(链接2)来创建我的发布版,该批处理文件首先调用“版本号”批处理文件(因此我在名为%VersionNumber%的环境变量中拥有版本号),然后执行一个MSBuild项目文件
  • MSBuild项目文件构建解决方案,并通过从环境变量中读取版本号{{link4:.csproj文件}}以获得.exe的版本号(然后我使用{{link5:MSBuild Community Tasks}}在预生成事件中创建具有版本号的AssemblyInfo文件)
    这意味着当从Visual Studio构建.exe时,.exe的版本为0.0,但我对此感到满意,因为我从批处理文件创建所有发布。
  • 为了创建带有WiX安装设置的发布版,我执行另一个批处理文件,它只调用上面提到的“build”批处理文件,然后调用WiX实用程序candlelight来构建实际设置。
  • candle使用这个.wxs文件创建设置,在这里我再次从环境变量中获取版本号:$(env.VersionNumber)
  • light创建的最终.msi文件在其文件名中包括版本号,因为我将文件名(包括带版本号的环境变量)作为参数传递:-out release\msi\bitbucket-backup-%VersionNumber%.msi

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


代码库已删除!sdsfdsfds - user1034912
所有链接现在都已修复。该仓库现在位于GitHub上 - Bitbucket上的那个是一个Mercurial仓库,在BB完全停止对Mercurial的支持后就消失了。 - Christian Specht

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接