我正在嘗試使用WiX 3.7生成MSI安裝程序。我使用heat.exe從我的build目錄的內容創建一個wxs片段,然後我在一個單獨的靜態wxs文件中引用它。我還需要對此文件應用XSL轉換,以便將「ServiceInstall」節點添加到其中一個組件。即使是像我這樣的XSL noob,添加節點也相當簡單。但是,爲了使生成的XML格式良好,我需要將對WixUtil擴展的引用添加到Wix節點和Fragment節點。所以,我的XML是這樣的:使用XSL向節點添加命名空間
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="Main">
<Component Id="xyz" Guid="{123}">
<File Id="xyz" KeyPath="yes" Source="$(var.mainDir)\some.exe" />
<util:ServiceInstall Id="xyz" Type="ownProcess" Vital="yes" Name="someService" DisplayName="someService" Description="An example service." etc="etc" />
</Component>
</DirectoryRef>
</Fragment>
</Wix>
,我需要它是這樣的:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Fragment xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<DirectoryRef Id="Main">
<Component Id="xyz" Guid="{123}">
<File Id="xyz" KeyPath="yes" Source="$(var.mainDir)\some.exe" />
<util:ServiceInstall Id="xyz" Type="ownProcess" Vital="yes" Name="someService" DisplayName="someService" Description="An example service." etc="etc" />
</Component>
</DirectoryRef>
</Fragment>
</Wix>
我動態添加空間聲明的維克斯元素和工作正常,使用下面的代碼,從另一個答案借來的StackOverflow:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:old="http://schemas.microsoft.com/wix/2006/wi"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
exclude-result-prefixes="old">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pNewNamespace" select="'http://schemas.microsoft.com/wix/2006/wi'"/>
<xsl:variable name="vXsi" select="document('')/*/namespace::*[name()='util']"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
然而,當我嘗試用同樣的方法在聲明添加到片段節點,它返回亂碼XML。感覺這應該是一個非常簡單,直接的任務。我究竟做錯了什麼?
你確定你需要的聲明'的xmlns:UTIL = 「http://schemas.microsoft.com/wix/UtilExtension」'兩次?它在根元素上的存在就足夠了。 –
我認爲它會 - 但節點似乎不會繼承它。當試圖構建我的WixProj並將聲明添加到根元素但不是時,我得到以下內容:「組件元素包含意外的子元素」以及隨附的「無法找到屬性'xyz'的模式信息」消息。 ETA - 感謝您的回覆。 –