2011-10-26 28 views
3

我正在尝试使用WIX为我的项目创建一个MSI。我有HEAT指向正确的目录和它吐出的文件是正确的,但由于某种原因,当我实际上运行MSBuild它也给我所有我的单元测试DLL文件。使用WIX时删除单元测试dll文件

任何人有任何想法如何从构建过程中删除这些?

回答

3

一种选择是写一个XSL转换修改所产生的热量输出(例如删除不需要的文件):

heat.exe dir <other arguments> -t my.xsl 

要删除特定文件的XSL可能是这样的:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="node()[child::node()[@Source='UnwantedAssembly.dll']]" /> 
</xsl:stylesheet> 

该方法允许您对文件进行其他更改。尽管只删除不需要的文件,但通常只需从构建目录中删除它们或将所需文件移动到另一个目录并在其中运行HEAT通常更简单。

1

正常情况下,您不会将heat.exe指向默认生成目录。在编译产品的二进制文件后,再添加第二步,将所需的文件放入第二个目录。然后,在staged目录中指向heat.exe。这样你就可以更好地控制收获路径的文件&。

+0

这听起来像是一个很好的选择一个花哨的xsl文件。实际上,您是否将该命令放入编译后编译步骤?你对.pdb或.vhost。*文件做了什么? – tofutim

+0

当我需要打包大量html帮助/文档文件时,我通常只使用收集器。基本上,可能会频繁更改的文件或需要很少定制的大量文件,因为我永远不会真正查看生成的.wsx文件的内容或将其检入版本控制。比我手动输入更复杂的任何东西。 – jbudreau