2017-06-26 38 views
5

在为heat.exe收集文件时,我想从输入文件夹中排除扩展名为.exe的文件,因为它首先获取文件夹中的所有文件。如何排除Wix工具集中的文件

以下是我的代码。

“%WIX_PATH%\ Heat.exe”dir“%input_folder%”-cg SourceProjectComponents -dr INSTALLLOCATION -scom -sreg -srd -var var.BasePath -gg -sfrag -var var.BasePath -out“%output_folder %\ Output.wxs“

PS:input_folder由整体.dll和.exe文件组成。因此个人收集文件是不可能的。

在此先感谢。

回答

8

您将需要使用xlst变换。

像这样的东西应该适合你;只需在命令行中加入-t <Path to the xlst file>即可。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:wix="http://schemas.microsoft.com/wix/2006/wi" 
       xmlns="http://schemas.microsoft.com/wix/2006/wi" 
       exclude-result-prefixes="xsl wix"> 

    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> 

    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <!-- Remove the exe files --> 
    <xsl:template match="*[self::wix:Component or self::wix:ComponentRef] 
         [key('ExeToRemove', @Id)]" /> 
</xsl:stylesheet> 
+0

它就像一个魅力。感谢您的帮助 –

1

我有,我有很多的文件,我需要包括到一个项目中的WXS文件相同的问题,我写了一个开源的命令行应用程序生成的目录结构,文件和组件,而个XML通过.wixignore文件忽略文件夹,扩展名,文件等(格式类似于.gitignore)。

你可以看看它here

+0

为什么不使用wix的一部分heat.exe?它的目的正是为了你所做的 –

+0

@Michal Hainc,因为在我看来,heat.exe并不是非常用户友好。 –

相关问题