我可以选择使用变换包含Wix Heat的特定文件扩展名吗?

时间:2014-10-17 19:40:46

标签: wix installer heat

使用xslt文件使用wix转换热量收集组件时,是否可以仅包含某些文件扩展名?我知道我可以使用以下内容排除文件扩展名:

<xsl:key name="exe-search" match="wix:Component[contains(wix:File/@Source, '.pdb')]" use="@Id" /> <!--.pdb-->

但是可以包含多种文件类型并排除其他所有内容(例如:.exe,.dll,.xml)吗?

谢谢!

1 个答案:

答案 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