【发布时间】:2011-11-16 15:27:08
【问题描述】:
我正在尝试使用 WIX 为我的项目创建 MSI。我有 HEAT 指向正确的目录并且它吐出的文件是正确的,但是由于某种原因,当我实际在其上运行 MSBuild 时,它也给了我所有的单元测试 dll 文件。
有人知道如何从构建过程中删除它们吗?
【问题讨论】:
标签: .net msbuild wix windows-installer
我正在尝试使用 WIX 为我的项目创建 MSI。我有 HEAT 指向正确的目录并且它吐出的文件是正确的,但是由于某种原因,当我实际在其上运行 MSBuild 时,它也给了我所有的单元测试 dll 文件。
有人知道如何从构建过程中删除它们吗?
【问题讨论】:
标签: .net msbuild wix windows-installer
一种选择是编写一个 XSL 转换来修改生成的 HEAT 输出(例如删除不需要的文件):
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。
【讨论】:
通常您不会因为这个原因将 heat.exe 指向您的默认构建目录。编译产品的二进制文件后,添加第二个步骤,将您想要的文件暂存到第二个目录中。然后,将 heat.exe 指向暂存目录。这样您就可以更好地控制收集的文件和路径。
【讨论】: