我的问题是heat.exe没有命令行开关将“MultiInstance”属性设置为“yes”(甚至用于设置任意属性)。似乎我唯一的办法是为-t
开关提供变换xslt。有没有人已经有一个xslt,它将在所有收获的输出组件元素上包含MultiInstance="yes"
属性?
如果我没有得到任何答案,我将自己创作一个,并将其作为这个问题的答案发布。
答案 0 :(得分:2)
这个怎么样?我基本上是从第二个线程复制它并修改了几个字符:
<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热源并自行添加参数。理论上应该很容易。
WiX Installer: using xslt with heat.exe to update attributes
答案 1 :(得分:1)
只需在此处共享我的文件,上面提供的文件可能会对文件节点产生一些问题。
<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>