“Fragment”元素包含一个未处理的扩展元素“util:RegistrySearch”。

23

我希望学习如何创建Wix引导程序,以便我可以在我的msi安装包中安装.NET框架。但是,我遇到了一个未处理的扩展元素错误。下面是代码:

<?xml version="1.0" encoding="utf-8"?>
<!--
# This comment is generated by WixEdit, the specific commandline
# arguments for the WiX Toolset are stored here.

candleArgs: "<projectfile>" -ext WixBalExtension
lightArgs: "<projectname>.wixobj" -ext WixBalExtension
-->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
 xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">

<Bundle UpgradeCode="80B0ECBE-CAAE-4B6A-9705-49F0232B0C24" 
        Version="0.0.1">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
    <Chain>
        <PackageGroupRef Id="Netfx45" />
    </Chain>
</Bundle>

<Fragment>
    <util:RegistrySearch Root="HKLM" 
                         Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" 
                         Value="Version" 
                         Variable="Netfx4FullVersion" />
    <util:RegistrySearch Root="HKLM" 
                         Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" 
                         Value="Version" 
                         Variable="Netfx4x64FullVersion" 
                         Win64="yes" />
    <!-- .NET 4.5 only installed if Vista or higher AND it's not already installed-->
    <!-- .NET 4.5 only installed if Vista or higher AND it's not already installed-->    
<PackageGroup Id="Netfx45">
        <ExePackage Id="Netfx45" 
                    Cache="no" 
                    Compressed="yes" 
                    PerMachine="yes" 
                    Permanent="yes" 
                    Vital="yes" 
                    InstallCommand="/q" 
                    SourceFile="C:\Users\ProRip\Downloads\dotnetfx45_full_x86_x64.exe" 
                    DetectCondition="(Netfx4FullVersion=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))" 
                    InstallCondition="(VersionNT &gt;= v6.0 OR VersionNT64 &gt;= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))" />
    </PackageGroup>
</Fragment>

错误信息为

error CNDL0200 : The Fragment element contains an unhandled extension element 'util:RegistrySearch'.  Please ensure that the extension for elements in the 'http://schemas.microsoft.com/wix/UtilExtension' namespace has been provided.
error CNDL0200 : The Fragment element contains an unhandled extension element 'util:RegistrySearch'.  Please ensure that the extension for elements in the 'http://schemas.microsoft.com/wix/UtilExtension' namespace has been provided

请问有人可以解释一下我的错误在哪里吗?我已经包含了正确的命名空间,但是我看不出出现错误的原因!


4
当您使用Candle编译代码时,是否使用了-ext WixUtilExtension?请注意,我的任务是翻译,因此我不会提供解释或回答除翻译外的任何内容。 - Yan Sklyarenko
好的,我已经将“-ext WixBalExtension”更改为“WixUtilExtension”,但现在我遇到了默认引导程序应用程序错误。未解决符号引用'WixBootstrapperApplication:WixStandardBootstrapperApplication.RtfLicense'。 - codem
你不应该替换,而是添加另一个扩展。像这样:-ext WixUtilExtension,WixBalExtension。虽然语法可能会有误,但可以不断尝试调整直到生效。 - Yan Sklyarenko
1
非常感谢,现在已经完成了。我尝试了几种组合来使多个扩展程序正常工作。结果发现需要使用“-ext WixBalExtension -ext WixUtilExtension”。之前我放弃了,因为不确定是否能够使用多个扩展程序。 - codem
1个回答

56

如果您正在使用Visual Studio,那么命名空间xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"的WiX扩展由名为WixUtilExtension的dll提供。在项目中右键单击“引用”节点并添加对WixUtilExtension dll的引用即可。


2
谢谢。我会补充说,您也可以从NuGet获取这些dll文件。 <?xml version="1.0" encoding="utf-8"?> <packages> <package id="WiX.Toolset" version="3.9.1208" targetFramework="net45" /> </packages> 这对于我的构建机很有帮助,因为我没有安装Wix(就像我在本地做的那样)。 - granadaCoder
1
如果您正在命令行上运行,则需要在light调用中添加-ext WiXNetFxExtension,并且可能还需要在candle调用中添加。https://wixtoolset.org/documentation/manual/v3/howtos/general/extension_usage_introduction.html - phyatt
我指的是 -ext WixUtilExtension - phyatt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接