我的问题是 heat.exe 没有命令行开关来将“MultiInstance”属性设置为“yes”(甚至用于设置任意属性)。看来我唯一的办法就是为-t
开关提供一个转换 xslt。是否有人已经拥有一个 xslt,它将MultiInstance="yes"
在所有收获的输出组件元素上包含一个属性?
如果我没有得到任何答案,我将自己创作一个,并将其作为对这个问题的答案发布。
这个如何?我基本上是从第二个线程复制它并修改了几个字符:
<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"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
xmlns:my="my:my">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match='wix:Component'>
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="MultiInstance">
<xsl:text>yes</xsl:text>
</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
请注意,您可能需要对其进行更多调整,具体取决于您当前用于生成 wix 文件的热参数。
或者,您可以下载 WiX 热源并自己添加参数。理论上应该很容易。
只是在这里分享我的文件,上面提供的文件可能对文件节点有一些问题。
<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"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
xmlns:my="my:my">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match='wix:Component'>
<xsl:copy use-attribute-sets='MultiInstanceSet'>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:attribute-set name="MultiInstanceSet">
<xsl:attribute name="MultiInstance">yes</xsl:attribute>
</xsl:attribute-set>
</xsl:stylesheet>