You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WiX Toolset v4 util:XmlFile修改NLog.config遇ICE03错误求助

WiX v4 util:XmlFile修改NLog.config的ICE03错误解决

错误原因

ICE03错误核心是XML命名空间未正确处理。你的NLog.config根元素<nlog>带有命名空间xmlns="http://www.nlog-project.org/schemas/NLog.xsd",而你使用的XPath/nlog/targets/target[1]/@fileName未考虑命名空间——WiX的util:XmlFile对命名空间的处理比在线XPath测试器更严格,未指定命名空间的XPath会被判定为无效格式。

ElementPath的问题

原路径未处理命名空间,导致WiX无法定位目标元素,有两种修正方式:

  • 使用local-name()匹配元素(无需额外配置命名空间):
    ElementPath="/*[local-name()='nlog']/*[local-name()='targets']/*[local-name()='target'][1]/@fileName"
    
  • 为util:XmlFile指定Namespace属性:
    <util:XmlFile Id="editNLogConfig"
                  File="[INSTALLFOLDER]NLog.config"
                  Action="setValue"
                  ElementPath="/nlog/targets/target[1]/@fileName"
                  Namespace="http://www.nlog-project.org/schemas/NLog.xsd"
                  Value="[ENVIMPORTDIR][IMPPART1]" />
    

Value的问题

你的Value设置存在两处错误:

  1. WiX中引用属性的语法是[PROPERTY_NAME],而非${[PROPERTY_NAME]},所以${[ENVIMPORTDIR]}应改为[ENVIMPORTDIR]。
  2. 错误将layout属性内容拼接到fileName中——NLog的<target>元素里,fileName和layout是独立属性,不能混写。你原本需求是修改日志目录,无需改动layout,Value只需设置为[ENVIMPORTDIR][IMPPART1]即可。

更贴合需求的最优方案

你实际要替换的是NLog的logDirectory变量,直接修改<variable>元素的value属性比修改fileName更简洁,也避免后续NLog配置变更时重复修改:

修正后的WiX代码

<util:XmlFile Id="updateLogDirectory"
              File="[INSTALLFOLDER]NLog.config"
              Action="setValue"
              ElementPath="/*[local-name()='nlog']/*[local-name()='variable'][@name='logDirectory']/@value"
              Value="[ENVIMPORTDIR]" />

只需传入ENVIMPORTDIR属性值(注意修正为标准UNC路径\\ttt-filer.tt.yy\sdf\uer\qar\sdf2),NLog会自动用新的logDirectory变量拼接原有fileName路径,无需改动target的其他属性。

内容的提问来源于stack exchange,提问作者NadjaL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:47:37