我正在将产品安装程序从 Wix v3 迁移到 WiX v5.0.1,并在此处应用转换时遇到问题,
我已经在 wixproj 文件中指定了 Transform 路径,如下所示,
<ItemGroup>
<HarvestDirectory Include="D:\source\repos\src\Client\ProductName\bin\Debug\net8.0-windows7.0\">
<ComponentGroupName>MyAppComponents</ComponentGroupName>
<DirectoryRefId>INSTALLFOLDER</DirectoryRefId>
<SuppressRootDirectory>true</SuppressRootDirectory>
<Transform>D:\source\repos\src\Client\Setup2\msi\Exclude.xslt</Transform>
</HarvestDirectory>
<BindPath Include="D:\source\repos\src\Client\ProductName\bin\Debug\net8.0-windows7.0\" />
</ItemGroup>
Exclude.xslt 文件看起来像这样,
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wix="http://schemas.microsoft.com/wix/2006/wi" version="1.0">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<!-- Copy all elements by default -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- Change RegistryValue Root from HKCR to HKCU -->
<xsl:template match="wix:RegistryValue[@Root='HKCR']">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="Root">HKCU</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
你知道我在这里做错了什么吗?
我无法判断您的匹配是否有效,但您必须先设置属性,然后应用模板。您的选择属性也缺少“node()”。
<!-- Change RegistryValue Root from HKCR to HKCU -->
<xsl:template match="wix:RegistryValue[@Root='HKCR']">
<xsl:copy>
<xsl:attribute name="Root">HKCU</xsl:attribute>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
如果您使用 Visual Studio Professional,则可以按照此处所述调试 XSLT:演练,调试 XSLT 样式表