我正在尝试使用此XDT部分将NLog自定义配置部分插入到我的Web.config中:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" throwExceptions="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xdt:Transform="InsertIfMissing" >
<targets>
<target xsi:type="File" name="logfile" fileName="H:\testLog.txt" layout="${longdate} ${uppercase:${level}} ${message}" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="logfile" />
</rules>
</nlog>
当我运行XDT转换时,我的Web.Debug.config包含:
<nlog throwExceptions="true" xmlns="http://www.nlog-project.org/schemas/NLog.xsd">
<targets>
<target d4p1:type="File" name="logfile" fileName="H:\testLog.txt" layout="${longdate} ${uppercase:${level}} ${message}" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="logfile" />
</rules>
</nlog>
通常,名称空间前缀是任意的,因此将xsi转换为d4p1不会导致任何问题。
但是,当我使用d4p1
时,我在NLog的应用程序中遇到运行时异常。手动将d4p1
的实例更改为xsi
可以解决问题,但如果用户需要在以后手动更改文件,则会破坏配置转换的实用程序。
有没有办法使用XDT保留名称空间前缀?
答案 0 :(得分:2)
我们遇到了完全相同的问题。我不确定为什么突然开始发生特定项目,但我们的解决方案是将xsi命名空间添加到原始配置文件的顶层(即转换工作的基本文件)。所以......
<configuration>
......会变成......
<configuration xmlns:xsi="http://www.nlog-project.org/schemas/NLog.xsd">
这就是诀窍。
另一种方法也适用于在nlog元素的子元素上应用变换。
希望能有所帮助。
答案 1 :(得分:1)
当我将xdt:Transform属性从目标和规则标记移动到nlog时,我开始看到这个问题。将它们移回原来的标签会解决它:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" throwExceptions="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets xdt:Transform="InsertIfMissing">
<target xsi:type="File" name="logfile" fileName="H:\testLog.txt" layout="${longdate} ${uppercase:${level}} ${message}" />
</targets>
<rules xdt:Transform="InsertIfMissing">
<logger name="*" minlevel="Trace" writeTo="logfile" />
</rules>
</nlog>