如何使用heat(WiX 3.5)排除文件收集?

29

我想使用heat.exe收集一个文件夹里的很多文件。但是我想排除特定的文件扩展名,比如“*.txt”之类的。怎么做呢?

3个回答

7

我认为现在唯一的选择是收集整个文件夹并对生成的.wxs文件应用转换(请参见-t:<xsl>开关)以排除不需要的内容(在您的情况下是txt文件)。然而,我没有尝试过heat的3.5版本(基于3.0的判断),但我不认为在这个领域有什么变化。


你有关于这个的更多信息吗?我想做同样的事情,但是针对“.cs”文件。我已经在网络上搜索了很多示例,但没有找到任何有用的。 - Sean Anderson
1
你是什么意思?这里的基本想法是heat.exe将为您收集整个文件夹内容,然后由您负责使用XSLT和支持的-t开关或任何其他自定义方式来过滤结果。我还强烈建议您阅读并理解@Christopher在下面关于此方法的危险性的回答。 - Yan Sklyarenko

3
我不是这种模式的狂热支持者。使用非确定性过程时,您如何确保变更控制?您如何知道出现在目录中的文件确实应该在产品中发货,以及您如何知道从目录中消失的文件不会破坏构建?您如何知道您正在打破组件规则并创建可维护性问题?
我曾经在1990年代进行动态文件链接,因为它很“容易”,但我记得它曾多次咬我一口,自那以后我再也没有这样做过。
我知道Bob Arnson曾经同意这个观点:

http://www.mail-archive.com/wix-users@lists.sourceforge.net/msg03420.html

但是在WiX 3.5中,我开始看到支持动态链接的功能,我不明白为什么他们要采用这种方法。我更愿意更新一个WXS文件并将其检入源代码控制,而不是冒险将我的部署过程放在自动驾驶模式下。


1
我想说的是,“责任由我担当”。安装程序既涉及开发,也涉及变更管理。通常与构建/发布管理相关。关键是,如果需要将新文件添加到安装程序或从安装程序中删除文件,则希望有意识地进行更改。当使用上游动态文件链接时,自动化中的问题可能会导致文件在安装程序中突然出现和消失,而没有任何警告。这永远不会有好结果。这确实容易出错。待续... - Christopher Painter
1
然而,将工作项与安装程序关联,指出需要添加或删除文件,并指示开发人员在源代码控制中进行更改以实现该项并不容易出错。这是可以构建和测试的。如果上游问题发生,您不会神奇地添加和删除文件。它非常可靠。此外,我曾经参与过安装程序中有20,000个文件的项目,从构建到构建的变化并不是很大。您达到了一个稳定点,您不再希望它是动态的。 - Christopher Painter
在 CI 环境中,每当您向项目中添加或删除文件时更新 wix 源文件是逆生产的。 - Oskar Emil
别误会 - 我在WiX工具集方面经验不是很丰富,也不想引发另一场讨论。我只是看到了许多“流畅”的代码/内容集,并且对手动维护列表的方法有些“感觉上的问题”。团队已经有很多工作要做了,如果我告诉他们要保持额外的1000多个文件列表,他们会看着我然后继续复制粘贴 ;) 我相信heat和其他生成器确实可以帮助 - 它们只需要像任何工具一样正确地使用。 - quetzalcoatl
PS,如果您有兴趣帮助编写,我在ISWIX中有一个新功能要实现。我认为您会喜欢它。 - Christopher Painter
显示剩余14条评论

2

不是尝试从文件夹中选择的文件抓取,我使用一个构建前动作来填充只有我想要抓取的文件的文件夹。以下工作流对我很有用:

  1. 如果存在,则删除“文件”
  2. 创建“文件”文件夹
  3. 将文件复制到“文件”文件夹。我使用robocopy生成操作,它为我提供了足够的控制来指定要包括或排除哪些文件。
  4. 收集整个文件夹。

我已经设置了条件运行收获操作,仅针对调试版本。 发布版本从我们的TFS服务器生成,并使用源代码控制中生成的.wxs。 在构建服务器上运行收获操作应该没问题,但这是一个额外的步骤,不运行它可以消除Christopher Painter描述的“非确定性过程”问题。 除了这一步之外,与我在开发机器上执行的相同步骤也在构建服务器上执行。


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