xml – 在Wix中指定带有热量的文件ID
发布时间:2020-12-16 22:57:27 所属栏目:百科 来源:网络整理
导读:我正在收获一个带有热量的文件,我真的想给它一个不错的id,而不是通常的“filXXXXXXXX”,主要是因为我需要在安装程序的其他部分引用它.我知道Id总是相同的,在不同的机器上和不同的文件内容显然所以我可以放心使用它,并且相信它在构建时不会改变,比方说,在CI服
我正在收获一个带有热量的文件,我真的想给它一个不错的id,而不是通常的“filXXXXXXXX”,主要是因为我需要在安装程序的其他部分引用它.我知道Id总是相同的,在不同的机器上和不同的文件内容显然所以我可以放心使用它,并且相信它在构建时不会改变,比方说,在CI服务器上.
当然,让这个价值更加人性化会好得多.似乎Heat没有生成文件ID的命令行选项(编辑:显然有一个-suid选项将停止生成数字ID,只使用文件名作为ID,无论如何在许多场景中都不可行),所以我正在经历编写XSLT的痛苦,但无法达到我想要的,任何人都可以帮忙吗? 这是片段文件: <?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Fragment> <DirectoryRef Id="DBScripts" /> </Fragment> <Fragment> <ComponentGroup Id="CSInstallerConfig"> <Component Id="cmpD6BAFC85C2660BE8744033953284AB03" Directory="DBScripts" Guid="{A39BABF5-2BAC-46EE-AE01-3B47D6C1C321}"> <File Id="filB31AC19B3A3E65393FF9059147CDAF60" KeyPath="yes" Source="$(var.CONFIG_PATH)CSInstaller.config" /> </Component> </ComponentGroup> </Fragment> </Wix> 这是XSLT: <?xml version="1.0" encoding="utf-8"?> <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"> <xsl:output method="xml" indent="yes"/> <xsl:template match="@*|*"> <xsl:copy> <xsl:apply-templates select="@*|*" /> </xsl:copy> </xsl:template> <xsl:template match="File"> <xsl:attribute name="Id"> <xsl:value-of select="123"/> </xsl:attribute> </xsl:template> </xsl:stylesheet> 现在,我是一个使用XSL的真正的菜鸟,所以上面的文件可能完全是胡说八道,但无论如何,正在发生的是“文件”元素被直接复制而没有更改ID. 任何的想法? 解决方法
您的基本问题是命名空间或XML根元素wi.
你没有解决这个问题,所以XSLT实际上根本找不到你的File元素. 接下来,您需要对模板进行一些调整,以正确复制File的其他属性: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wi="http://schemas.microsoft.com/wix/2006/wi"> <xsl:output method="xml" indent="yes"/> <xsl:template match="@*|*"> <xsl:copy> <xsl:apply-templates select="@*|*" /> </xsl:copy> </xsl:template> <xsl:template match="wi:File"> <xsl:copy> <xsl:attribute name="Id"> <xsl:value-of select="123"/> </xsl:attribute> <xsl:apply-templates select="@*[not(name()='Id')]" /> <xsl:apply-templates select="*" /> </xsl:copy> </xsl:template> </xsl:stylesheet> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |