使用xslt文件使用wix转换热量收集组件时,是否可以仅包含某些文件扩展名?我知道我可以使用以下内容排除文件扩展名:
<xsl:key name="exe-search" match="wix:Component[contains(wix:File/@Source, '.pdb')]" use="@Id" /> <!--.pdb-->
但是可以包含多种文件类型并排除其他所有内容(例如:.exe,.dll,.xml)吗?
谢谢!
答案 0 :(得分:7)
不确定。在条件中,您可以使用完整的表达式,例如:
contains(wix:File/@Source, '.pdb')
or contains(wix:File/@Source, '.exe')
or contains(wix:File/@Source, '.dll')
or contains(wix:File/@Source, '.xml')
如果它只是少数,那应该是可维护的。为了提高可读性,您可以将换行符放在match属性值(或任何属性)中。
该模板匹配不需要的组件,并将其替换为任何组件。
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wi="http://schemas.microsoft.com/wix/2006/wi"
xmlns="http://schemas.microsoft.com/wix/2006/wi">
<xsl:template match="wi:Component[not(
contains(concat(wi:File/@Source,'|'), '.exe|') or
contains(concat(wi:File/@Source,'|'), '.config|'))]">
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是一个与之配合使用的加热命令:
heat dir "%wix%\bin" -cg CompGroup -ag -t byext.xsl -o test.wxs