WiX无法构建。请确保元素的扩展位于提供的名称空间中

时间:2018-01-29 16:04:06

标签: wix

所以我试图在Visual Studio 2017中创建一个WiX安装程序并遇到:

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

我已经从here安装了VS WiX扩展程序。

有些Google信息将会显示,thisone of thesesome of thisthisthis。以及其他一些只与切线相关的内容。

我只想说这些解决方案中的大多数解决了'你忘了将WixUtilExtension.dll的引用添加到你的项目'。除了最后一个以“从未见过好运”结尾的人。

我正在尝试在安装时添加一个EventSource和Log:

 <Fragment>
    <PropertyRef Id="NETFRAMEWORK40FULLINSTALLROOTDIR"/>
    <PropertyRef Id="NETFRAMEWORK40FULLINSTALLROOTDIR64"/>
    <PropertyRef Id="NETFRAMEWORK40CLIENTINSTALLROOTDIR"/>
    <PropertyRef Id="NETFRAMEWORK40CLIENTINSTALLROOTDIR64"/>

    <Util:EventSource 
      KeyPath="yes"
      Name="SourceName"
      Log="LogName" 
      SupportsErrors="yes"
      SupportsWarnings="yes"
      SupportsFailureAudits="yes"
      SupportsSuccessAudits="yes"
      SupportsInformationals="yes"
      EventMessageFile="[NETFRAMEWORK40FULLINSTALLROOTDIR]EventLogMessages.dll"
    />
  </Fragment>

我已将对根Wix元素的引用添加为:

<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:Util="http://schemas.microsoft.com/wix/UtilExtension">

我已经添加了对WixUtilExtension.dll的引用:

C:\Program Files (x86)\WiX Toolset v4.0\bin\WixUtilExtension.dll

我也试过从以下方面引用所述dll的3.11版本:

C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUtilExtension.dll

我已经检查了cmd行调用,并确实将其添加为-ext传递参数(如果要验证,则是倒数第二次调用):

C:\Program Files (x86)\WiX Toolset v4.0\bin\candle.exe -out obj\Release\ -d"DevEnvDir=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\\" -d"SolutionDir=C:\TFS\Utilities\Program\\" -dSolutionExt=.sln -d"SolutionFileName=Program.sln" -d"SolutionName=NPA Task Scheduler" -d"SolutionPath=C:\TFS\Utilities\Program\Program.sln" -dConfiguration=Release -dOutDir=bin\Release\ -dPlatform=x86 d"ProjectDir=C:\TFS\Utilities\Program\WiX Setup\\" -dProjectExt=.wixproj d"ProjectFileName=WiX Setup.wixproj" -d"ProjectName=WiX Setup" -d"ProjectPath=C:\TFS\Utilities\Program\WiX Setup\WiX Setup.wixproj" -d"TargetDir=C:\TFS\Utilities\Program\WiX Setup\bin\Release\\" -dTargetExt=.msi -d"TargetFileName=Setup.msi" -d"TargetName=Setup" -d"TargetPath=C:\TFS\Utilities\Program\WiX Setup\bin\Release\Setup.msi" -d"Program.Configuration=Release" -d"HelperDLL.FullConfiguration=Release|AnyCPU" -d"HelperDLL.Platform=AnyCPU" -d"HelperDLL.ProjectDir=C:\TFS\Utilities\Program\HelperDLL\\" -d"HelperDLL.ProjectExt=.csproj" -d"HelperDLL.ProjectFileName=HelperDLL.csproj" -d"HelperDLL.ProjectName=HelperDLL" -d"HelperDLL.ProjectPath=C:\TFS\Utilities\Program\HelperDLL\HelperDLL.csproj" -d"HelperDLL.TargetDir=C:\TFS\Utilities\Program\HelperDLL\bin\Release\\" -d"HelperDLL.TargetExt=.dll" -d"HelperDLL.TargetFileName=HelperDLL.dll" -d"HelperDLL.TargetName=HelperDLL" -d"HelperDLL.TargetPath=C:\TFS\Utilities\Program\HelperDLL\bin\Release\HelperDLL.dll" -d"Service.Configuration=Release" -d"Service.FullConfiguration=Release|AnyCPU" -d"Service.Platform=AnyCPU" -d"Service.ProjectDir=C:\TFS\Utilities\Program\NPA Task Runner\\" -d"Service.ProjectExt=.csproj" -d"Service.ProjectFileName=NPA Task Runner.csproj" -d"Service.ProjectName=NPA Task Runner" -d"Service.ProjectPath=C:\TFS\Utilities\Program\Service\Service.csproj" -d"Service.TargetDir=C:\TFS\Utilities\Program\Service\bin\Release\\" -d"Service.TargetExt=.exe" -d"Service.TargetFileName=Service.exe" -d"Service.TargetName=Service" -d"Service.TargetPath=C:\TFS\Utilities\Program\Service\bin\Release\Service.exe" -arch x86 -ext "C:\Program Files (x86)\WiX Toolset v4.0\bin\\WixUtilExtension.dll" -ext "..\..\..\..\Users\me\Documents\Visual Studio 2017\Projects\Utils\Utils\bin\Debug\Utils.dll" Product.wxs

我还检查并确认dll确实存在于这些位置。 IntelliSense似乎也能识别它,甚至还提供了CTRL + Space的标签帮助。

此刻我有点失落。我添加了它,删除它,重新添加它,更改它,关闭并重新打开项目,关闭并重新启动计算机。尝试在顶部和直接持有引用的片段中的xmlns ref调用。我已尝试使用最小数量的参数(3 according to this)和附加内容。将EventSource调用放在几个不同的片段元素中,它是自己的,没有任何工作。我觉得我错过了一些非常明显的东西,但是我看不到它。

编辑:我最近刚遇到this。这似乎指向不同的参考:

http://wixtoolset.org/schemas/v4/wxs/util

而不是:

http://schemas.microsoft.com/wix/UtilExtension

也没用。不幸的是,他们关于4.0的文档仍然不完整/未发布。我在git hub中查找了它,虽然IntelliSense仍在显示,但我没有看到对EventSource的任何引用。

编辑:我明白了。感谢关于架构更改的帖子和一些关于git的源代码。

首先是4.0的架构更改。对于那些通过谷歌和发布4.0参考文档之前发现这一点的人,可以找到这些更改here。接下来,EventSource所需的标签位置似乎已经改变;在3.0中的Fragment元素中,现在它必须在Component元素中。这让我想到了第二个问题,即使用默认属性值(PropertyRef元素)。您将需要另一个wix参考:

xmlns:NetFX="http://wixtoolset.org/schemas/v4/wxs/netfx"

注意:这也是架构中3.0到4.0更改的一部分。 这还需要对4.0 bin文件夹中的WixNetFxExtention.dll进行dll引用。

2 个答案:

答案 0 :(得分:0)

我不确定我是否以“正确”方式执行此操作,但这是我的工作wxs文件包含的EventSource:

  <Util:EventSource
     xmlns:Util="http://schemas.microsoft.com/wix/UtilExtension"
     Name="MyApplication"
     Log="Application"
     EventMessageFile="%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll"
  />

尝试将xmlns属性添加到您的。

答案 1 :(得分:0)

我明白了。感谢关于架构更改的post以及git对源代码的挖掘。

首先是4.0的架构更改。对于那些通过谷歌和发布4.0参考文档之前发现这一点的人,可以找到这些更改here。接下来,EventSource所需的标签位置似乎已经改变;在3.0中的Fragment元素中,现在它必须在Component元素中。这让我想到了第二个问题,即使用默认属性值(PropertyRef元素)。您还需要另一个WiX参考:

xmlns:NetFX="http://wixtoolset.org/schemas/v4/wxs/netfx"

注意:这也是架构中3.0到4.0更改的一部分。这还需要对4.0 bin文件夹中的WixNetFxExtention.dll进行dll引用。