我在使用xslt查找重复组件时遇到问题。 我正在用热量来收获2个项目。这些项目共享一些引用(.dll文件)。现在加热会产生2个碎片
首先创建ConfiguratorFiles.wxs并使用完全基本过滤器:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:key name="service-search" match="wix:Component[contains(wix:File/@Source, '.pdb')]" use="@Id" />
<xsl:template match="wix:Component[key('service-search', @Id)]"/>
<xsl:template match="wix:ComponentRef[key('service-search', @Id)]" />
输出完全正常,因为我真的希望每个dll都被复制并过滤掉pdb文件。
创建ServiceFiles.wxs文件时出现问题。我只是无法弄清楚如何检查第一个wxs文件中是否存在元素。
That链接提供了我可以嵌入C#函数的信息来执行某些逻辑。这似乎是一个巧妙的技巧,但我仍然不知道如何搜索其他文件的内容。
ServiceFilter.xslt与ConfiguratorFiles.xslt几乎相同,但我也会过滤掉.exe文件,因为我手动处理它们
<!--Match and ignore .pdb files-->
<xsl:key name="service-search" match="wix:Component[contains(wix:File/@Source, '.pdb')]" use="@Id" />
<xsl:template match="wix:Component[key('service-search', @Id)]"/>
<xsl:template match="wix:ComponentRef[key('service-search', @Id)]"/>
<!--Match and ignore .exe files-->
<xsl:key name="exe-search" match="wix:Component[contains(wix:File/@Source, '.exe')]" use="@Id"/>
<xsl:template match="wix:Component[key('exe-search', @Id)]"/>
<xsl:template match="wix:ComponentRef[key('exe-search', @Id)]"/>
我在(ConfiguratorFiles.wxs和ServiceFiles.wxs)中都有以下组件。这会导致错误,这就是我需要过滤重复项的原因。
<Component Id="Foo.Base.dll" Guid="*">
<File Id="Foo.Base.dll" KeyPath="yes" Source="$(var.Foo.DSI.Configurator.TargetDir)\Foo.Base.dll" />
</Component>
如何编写过滤器&#34; ServiceFilter.xslt&#34;过滤重复项,以便ServiceFiles.wxs不包含ConfiguratorFiles.wxs中包含的文件?
我现在正在尝试的是使用C#方法。 现在我只需要弄清楚,如何在第一个文件中获取所有组件来填充FindDuplicate方法,因为它当前过滤了所有内容:)
<!--Match and ignore duplicate components-->
<xsl:key name="duplicate-search" match="wix:Component[user:FindDuplicate(wix:File/@Source)]" use="@Id"/>
<xsl:template match="wix:Component[key('duplicate-search', @Id)]"/>
<xsl:template match="wix:ComponentRef[key('duplicate-search', @Id)]"/>
<msxsl:script language="C#" implements-prefix="user">
<![CDATA[
public bool FindDuplicate(string name){
return true;
}
]]>
</msxsl:script>
答案 0 :(得分:1)
解决方案非常简单。
我现在创建2个独立的MSI文件。一个安装配置器,一个安装服务。 这2个MSI文件是在2个不同的WiX项目中创建的,因此重复条目的问题不再出现。